2009. 4. 2. 16:11 Program.../Oracle
REF CURSOR를 사용해 프로시저에서 여러행을 반환
자료출처 : 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
*/
/**
* 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 |