2014년 6월 19일 목요일

Dynamic sql in Oracle 11g(DBMS_SQL)[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]


Dynamic sql in 11g(DBMS_SQL)

;’Oracle 11g Dynamic SQL 새 특징

-       CLOB에 의해 32k 보다 큰 SQL문장 허용(DBMS_SQL.PARSE)
-       REF CURSOR DBMS_SQL 커서로 변환이 가능
-       DBMS_SQL에서 모든 데이터 타입 지원
-       DBMS_SQL에서 사용자 정의 컬렉션 타입을 지원


[예제1] Dynamic SQL CLOB 컬럼에 저장되는 예제

SQL> set serveroutput on
SQL> DECLARE
  2
  3         v_sql    CLOB;
  4         v_cursor BINARY_INTEGER;
  5         v_dummy  INTEGER;
  6
  7      BEGIN
  8
  9       v_sql := 'DECLARE
 10                     v_variable VARCHAR2(10);
 11                  BEGIN
 12                     v_variable := ''Some Value'';';
 13
 14
 15       
 16        WHILE LENGTH(v_sql) <= 33000 LOOP
 17           v_sql := v_sql ||
 18                    ' /* comment || RPAD(''x'',4000,''x'') */ ' ||
 19                    CHR(10);
 20        END LOOP;
 21
 22       
 23        v_sql := v_sql ||
 24                 '   DBMS_OUTPUT.PUT_LINE(
 25                        ''Value of V_VARIABLE is ['' || v_variable || '']'');

 26                  END;';
 27
 28       
 29        DBMS_OUTPUT.PUT_LINE(
 30           'Length of CLOB is [' || LENGTH(v_sql) || ']');
 31
 32       
 33        v_cursor := DBMS_SQL.OPEN_CURSOR;
 34        DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);
 35        v_dummy := DBMS_SQL.EXECUTE(v_cursor);
 36        DBMS_SQL.CLOSE_CURSOR(v_cursor);
 37
 38     END;
 39     /
Length of CLOB is [33145]
Value of V_VARIABLE is [Some Value]

PL/SQL 처리가 정상적으로 완료되었습니다.



[예제2] DBMS_SQL ref_cursor 지원

SQL> DECLARE
  2         TYPE emp_type IS TABLE OF emp%ROWTYPE
  3            INDEX BY PLS_INTEGER;
  4
  5         v_emps    emp_type;
  6         v_sql     CLOB;
  7         v_cursor  BINARY_INTEGER := DBMS_SQL.OPEN_CURSOR;
  8         v_rc      SYS_REFCURSOR;
  9        v_execute BINARY_INTEGER;
 10   BEGIN
 11        v_sql := 'SELECT * FROM emp WHERE job = :job';
 12
 13       
 14        DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);
 15
 16       
 17        DBMS_SQL.BIND_VARIABLE(v_cursor, 'JOB', '&job');
 18
 19        /* 커서문 실행 및 REF CURSOR변환... */
 20        v_execute := DBMS_SQL.EXECUTE(v_cursor);
 21        v_rc := DBMS_SQL.TO_REFCURSOR(v_cursor);
 22
 23        LOOP
 24           FETCH v_rc BULK COLLECT INTO v_emps LIMIT 100;
 25           FOR i IN 1 .. v_emps.COUNT LOOP
 26              DBMS_OUTPUT.PUT_LINE('Emp = ' || v_emps(i).ename);
 27           END LOOP;
 28           EXIT WHEN v_rc%NOTFOUND;
 29        END LOOP;
 30        CLOSE v_rc;
 31
 32     END;
 33     /
job의 값을 입력하십시오: SALESMAN
  17:       DBMS_SQL.BIND_VARIABLE(v_cursor, 'JOB', '&job');
  17:       DBMS_SQL.BIND_VARIABLE(v_cursor, 'JOB', 'SALESMAN');
Emp = ALLEN
Emp = WARD
Emp = MARTIN
Emp = TURNER

PL/SQL 처리가 정상적으로 완료되었습니다.



오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급 
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(6/23)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 
(6/23)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(6/23)[기업100%환급]SQL기초에서 Schema Object까지
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정

평일야간(19:00~21:50) 개강
(6/19)웹퍼블리싱 마스터
(6/19)Spring3.X, MyBatis, Hibernate실무과정
(6/24)안드로이드개발자과정
(6/24)MyBatis3.X, Hibernate4.X ORM실무과정
(6/26)SQL초보에서실전전문가까지
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(6/21)Spring3.X, MyBatis, Hibernate실무과정
(6/21)MyBatis3.X, Hibernate4.X ORM실무과정
(6/21)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(6/28)SQL초보에서 Schema Object까지
(6/28)안드로이드개발자과정
(6/28)개발자를위한PLSQL,SQL튜닝,힌트
(6/28)실무예제로 배워보는 jQuery(개발자/디자이너를위한)
(6/28)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/13)C#,ASP.NET마스터

주말저녁(18:30~22:20) 개강
(6/28)JAVA,Network&WEB&Framework
(6/28)SQL기초에서실무까지

댓글 없음:

댓글 쓰기