자료출처 : http://www.oracleclub.com

/** 
 * 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(){

        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{
             ocstmt.close();
             cstmt.close();
             conn.close();
        }    
    }
}
 
 
 
/**
 *  샐행
 *  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
 */
 


'Program... > Oracle' 카테고리의 다른 글

Materialized View란 ?  (0) 2009.04.13
Materialized View의 생성  (1) 2009.04.13
Oracle Trigger  (0) 2009.03.14
Oracle Procedure (Cursor, for loop Cursor)  (0) 2009.03.14
Oracle Procedure (배열)  (0) 2009.03.14
Posted by Duritz

공지사항

Yesterday
Today
Total
05-18 12:57

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31