오라클 참조커서, RefCursor, 자바JDBC에서 오라클함수리턴값받기, SQL교육, SQL학원, 오라클교육, 오라클학원, 자바교육, 자바학원,JAVA학원
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=712
ojc.asia
https://www.youtube.com/watch?v=rIf50lhW1IY&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=19

https://www.youtube.com/watch?v=udiEwV0Q1Mg&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=18

https://www.youtube.com/watch?v=HKy8Nk6nwQ0&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=17

https://www.youtube.com/watch?v=8hc030THr8w&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=16

오라클 PL/SQL
참조커서(Ref Cursor)
참조커서로 SELECT결과를 클라이언트로 리턴
자바JDBC에서 Ref Cursor로 리턴받기
참조커서(REF CURSOR)
- 일반 커서는 정적이며 커서가 한번 SQL 영역을 가리키면 가리키는 곳을 변경 못한다. 하지만 참조커서(REF CURSOR)는 가능하다.
Declare Type refcur is ref cursor; cursor c is select * from dual; myCur refCur; begin --myCur는 ref cursor if (to_char(sysdate,'DY') = '일') then open myCur for select * from emp; elsif (to_char(sysdate,'DY') != '일') then open myCur for select * from dept; end if; open c; -- 일반커서 end; / |
- 일반 커서가 가리키는 데이터는 함수나 프로시저를 호출한 곳으로 보낼 수 없지만 참조커서(REF CURSOR)가 가리키는 데이터는 가능하다.
-- 커서를 리턴할 수 있는 함수를 만든다.
CREATE OR REPLACE FUNCTION emptest(v_deptno in number) RETURN SYS_REFCURSOR AS
test_cursor SYS_REFCURSOR;
sql_string Varchar2(500);
BEGIN
sql_string := 'Select empno, ename, sal from Emp where deptno = :deptno' ;
Open test_cursor FOR sql_string USING v_deptno;
RETURN test_cursor;
CLOSE test_Cursor;
END;
/
variable a refcursor ;
exec :a := emptest(20) ;
print a;
EMPNO ENAME SAL
---------- ---------- ----------
7566 JONES 2975
7788 SCOTT 3000
7876 ADAMS 1100
7902 FORD 3000
-- JAVA/JSP등에서 확인
Class.forName(driver_name); //jdbc 드라이버연결
conn = DriverManager.getConnection(url,user,pwd); //Connection인수 입력
String proc_call = "{? = call emptest(?)}";
// 오라클 함수 또는 프로시저를 호출하기 위해 callable statement를 이용
CallableStatement cstmt = conn.prepareCall(proc_call);
// key here is to register the output parameter
// of type cursor, execute, then cast it as a ResultSet.
-- emptest 함수의 output 파라미터 타입을 CURSOR로 한다.
-- 첫번째 ?가 출력파라미터, 두번째 파리미터는 입력파라미터
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
cstmt.setInt(2, 10); //10번 부서의 데이터 얻기 위해
cstmt.executeQuery();
rs = (ResultSet)cstmt.getObject(1);
while(rs.next()) {
out.println(rs.getString("ename") + "<br>");
……
}
#참조커서, #오라클참조커서, #RefCursor, #오라클커서, #커서란, #SQL교육, #SQL학원, #오라클학원, #오라클교육, #자바교육, #자바학원, #오라클동영상, 참조커서, 오라클참조커서, RefCursor, 오라클커서, 커서란, SQL교육, SQL학원, 오라클학원, 오라클교육, 자바교육, 자바학원, 오라클동영상,
댓글 없음:
댓글 쓰기