OracleCallableStatement 와 Oracle Ref Cursor 를 사용하세요.
-- http://otn.oracle.co.kr/ 에서도 자료를 확인하실수 있습니다.
http://otn.oracle.com/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm#34_08
/** *
* @(#)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();
}
void prepareCall(){
try {
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection conn =
DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ORACLE", "scott", "tiger");
CallableStatement cstmt;
//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로 바꿉니다.
OracleCallableStatement 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){
}
}
}
No comments:
Post a Comment