PLSQL 동적커서 vs 정적커서, Dynamic Cursor실습, DDL실습, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원, ORACLE동영상
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=725
ojc.asia
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=724
ojc.asia
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=723
ojc.asia
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=721
ojc.asia
오라클 PL/SQL
DDL 실행
Dynamic Cursor
Static Cursor
실습
동적커서를 만들기 위해서는 참조커서를 이용하여 쿼리 문자열 OPEN FOR 구문으로 커서를 생성 합니다.
동적커서를 만들기 위한 OPEN-FOR-USING 문은 커서 변수를 SQL쿼리와 연결하고, 쿼리를 실행하고, 결과 집합의 첫 번째 행 앞에 커서를 놓은 다음, %ROWCOUNT에 의해 유지되는 처리된 행 수를 0으로 만드는 과정을 거칩니다.
WHERE 절을 미리 알고 있는 쿼리를 작성할 때 OPEN-FOR-USING 문을 사용하며, 알 수 없는 수의 WHERE 절이 있는 동적 쿼리 작성이 필요한 경우에는 OPEN-FOR 문을 사용합니다. 이때 커서 변수의 TYPE은 REF CURSOR가 되어야 합니다.
아래 예제에서 커서는 런타임에 SQL문을 담은 변수값에 의해 동적으로 생성되므로 컴파일 시점에 존재하지 않는 테이블에 대해 참조도 가능합니다.
[실습 : DDL실행 및 동적커서 생성]
[정적커서 사용예] DECLARE CURSOR c_emp IS SELECT ename, sal FROM emp WHERE deptno = 10; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN OPEN c_emp; LOOP FETCH c_emp INTO v_ename, v_sal; EXIT WHEN c_emp%NOTFOUND OR c_emp%NOTFOUND IS NULL; DBMS_OUTPUT.PUT_LINE(c_emp%ROWCOUNT || '. ' || v_ename || ',' || v_sal); END LOOP; CLOSE c_emp; END; / [동적커서 사용예] set serveroutput on; drop table emp_test; select * from emp_test; CREATE OR REPLACE PROCEDURE DynamicCursor (p_job IN VARCHAR2) IS TYPE cur_type IS REF CURSOR; c_cursor cur_type; sql_text1 VARCHAR2(1000); sql_text2 VARCHAR2(1000); sql_text3 VARCHAR2(1000); p_text VARCHAR2(100); BEGIN sql_text1 := 'create table emp_test (empno number primary key, ename varchar2(20), job varchar2(50) ) '; execute immediate sql_text1; sql_text2 := 'insert into emp_test values( :1, :2, :3)'; for i in 1..5 loop execute immediate sql_text2 using i, i || '길동', 'SALESMAN'; end loop; commit; IF p_job != 'SALESMAN' THEN sql_text3 := 'SELECT :1 || '' Not SALESMAN'' AS text FROM dual'; ELSE sql_text3 := 'SELECT ename FROM emp_test WHERE job = :1'; END IF; OPEN c_cursor FOR sql_text3 USING p_job; LOOP FETCH c_cursor INTO p_text; EXIT WHEN c_cursor%NOTFOUND; dbms_output.put_line(p_text); END LOOP; CLOSE c_cursor; END; / exec DynamicCursor('AAA'); exec DynamicCursor('SALESMAN'); |
#PLSQL동영상, #PLSQL, #동적커서, #정적커서, #DynamicCursor, #오라클교육, #SQL교육, #ORACLE교육, #SQL학원, #오라클학원, #자바학원, #JAVA학원, PLSQL동영상, PLSQL, 동적커서, 정적커서, DynamicCursor, 오라클교육, SQL교육, ORACLE교육, SQL학원, 오라클학원, 자바학원, JAVA학원