package java1031_plsql; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import oracle.jdbc.driver.OracleTypes; /* 1. Stored Procedure Stored Procedureë DB ë´ì íë¡ìì 를 ì ì¸íì¬ í´ë¼ì´ì¸í¸ê° íìí ëë§ë¤ í¸ì¶íì¬ ì¬ì©íëë¡ íë ë¨ìë¡ ì ì¥ë íë¡ìì ì´ë¤. ì´ë í´ë¼ì´ì¸í¸ìì SQL 문ì ì¤ííë ê²ì´ ìëë¼ DBì íë¡ìì ê° ì¡´ì¬íë ê²ì´ë¯ë¡ í´ë¼ì´ì¸í¸ìì ì ì¥ë íë¡ìì 를 ì¤íë§ í´ì£¼ë©´ ê·¸ ë´ì©ì´ oracle ë´ìì ë°ë¡ ì²ë¦¬ëë¤. ë°ë¼ì ìëê° ë¹ ë¥´ë©° ë¶íê° ì ê³ DB ë´ ì¡´ì¬íë í¹ì±ì´ ìë¤. 2. CallableStatement CallableStatementë DB ë´ì Stored Procedureì í¸ì¶í기 ìí ê°ì²´ë¡, ì´ ê°ì²´ë PreparedStatement ê°ì²´ë¥¼ ììë°ì ì¬ì©íë¤. ì´ ê°ì²´ìì registeroutParameter() ë©ìëë íë¡ìì ìì ëì´ì¤ë ê°ì ë°í ë°ê¸° ìí´ìë íìíë©°, íë¡ìì ë¡ë¶í° ëì´ì¤ë ê°ì íì ì ì§ì í´ì£¼ë ìí ì íë¤. 3. ìë°ìì PL-SQL select -ì¡°í결과를 ë³¼ ì ìë ì ì´ê¶ì ìë°ë¡ ë기기 ìí´ì ì¬ì©íë 커ì (SYS_REFCUSOR) -procedureììë 커ì를 openë§ íë¤. - fetch, close를 íì§ ìëë¤. íë¡ìì ìì± create or replace procedure pl_emplist (v_deptno in number, --appìì ê°ì ì¬ì©í기 ìí´ì(Multi row) v_cursor out sys_refcursor ) is begin open v_cursor for select employee_id,first_name, salary,department_id from employees where department_id=v_deptno; end; / */ public class Java242_plsql { private Connection conn; private CallableStatement cstmt; private ResultSet rs; public Java242_plsql() { process(); }// end java242_plsql() public void process() { try { Class.forName("oracle.jdbc.OracleDriver"); String url = "jdbc:oracle:thin://@127.0.0.1:1521:xe"; String user = "hr"; String password = "a1234"; conn = DriverManager.getConnection(url, user, password); String sql = "{call pl_emplist(?, ?)}"; cstmt = conn.prepareCall(sql); cstmt.setInt(1, 20); cstmt.registerOutParameter(2, OracleTypes.CURSOR); boolean result = cstmt.execute(); rs = (ResultSet) cstmt.getObject(2); while (rs.next()) { System.out.printf("%d %s %d %d \n", rs.getInt("employee_id"), rs.getString("first_name"), rs.getInt("salary"), rs.getInt("department_id")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }// end process() public static void main(String[] args) { new Java242_plsql(); } }