/** * * @(#)RefCursor.java * * * Oracle REF Cursor를 사용해 프로시저에서 여러행을 반환하는 예제 * * * -- 패키지가 헤더 생성 * CREATE OR REPLACE PACKAGE ref_cursor_pkg AS * TYPE ref_type IS REF CURSOR; * PROCEDURE ref_cursor_pro(v_result OUT ref_type, v_sql in VARCHAR2); * END; * * * -- 패키지 본문 생성 * CREATE OR REPLACE PACKAGE BODY ref_cursor_pkg AS * PROCEDURE ref_cursor_pro(v_result OUT ref_type, v_sql IN VARCHAR2) AS * begin * OPEN v_result FOR v_sql; * END; * END; * * * REF CURSOR는 오라클 PL/SQL에서 여러 레코드의 쿼리 결과를 가져올때 편하게 사용 할 수 있습니다. * 이 방법은 Oracle8i 이상에서 실행가능합니다. * * 아래 예제는 특정 SQL문을 PL/SQL In Parameter로 입력 받아서 쿼리 결과를 Out파라미터로 * 반환하는 예제 입니다. * Java Source를 실행하기 전에 위에 패키지 헤더와 본문을 SQL*Plus에서 먼저 실행해 주세요 * */ import java.sql.*; import oracle.jdbc.driver.OracleCallableStatement; import oracle.jdbc.driver.OracleTypes; public class RefCursor { public static void main(String[] args) { RefCursor vTest = new RefCursor(); vTest.prepareCall(); } public void prepareCall(){ Connection conn = null CallableStatement cstmt = null; OracleCallableStatement ocstmt = null; try { DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ORACLE", "scott", "tiger"); //Stored Procedure 를 호출하기 위해 JDBC Callable Statement를 사용 합니다 cstmt = conn.prepareCall("BEGIN ref_cursor_pkg.ref_cursor_pro(?,?); END;"); //프로시져의 In Parameter로 SELECT문장을 넘깁니다. cstmt.setString(2,"SELECT empno, ename FROM emp"); //CallableStatement를 위한 REF CURSOR OUTPUT PARAMETER를 //OracleTypes.CURSOR로 등록합니다. cstmt.registerOutParameter (1, OracleTypes.CURSOR); //CallableStatement를 실행합니다. cstmt.execute (); //getCursor() method를 사용하기 위해 CallableStatement를 //OracleCallableStatement object로 바꿉니다. ocstmt = (OracleCallableStatement)cstmt; //OracleCallableStatement 의 getCursor() method를 사용해서 REF CURSOR를 //JDBC ResultSet variable 에 저장합니다. ResultSet cursor = ocstmt.getCursor (1); //쿼리결과 empno, ename 출력 while (cursor.next ()) { System.out.print (cursor.getString (1)+" "); System.out.println (cursor.getString (2)); } }catch(Exception e){ }finally{ if(ocstmt != null) try{ocstmt.close();} catch(Exception e) {} if(cstmt!= null) try{cstmt.close();} catch(Exception e) {} if(conn!= null) try{ conn.close();} catch(Exception e) {} } } } /** * 샐행 * java -classpath .;C:\classes12.zip RefCursor * * 7369 SMITH * 7521 WARD * 7566 JONES * 7654 MARTIN * 7698 BLAKE * 7782 CLARK * 7788 SCOTT * 7839 KING * 7844 TURNER * 7876 ADAMS * 7902 FORD * 7934 MILLER */
- 강좌 URL : http://www.gurubee.net/lecture/1843
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.