본문 바로가기

오라클

동적 SQL

-- 동적 SQL

    동적 쿼리는 프로시져등에서 인자로 받은 변수를 조합하여 쿼리문을 생성하여 사용하는 경우를 말한다.

    예를 들어 블로그에서 사용자별 게시판 테이블을 만들 때.


  -- 주의

      RESOURCE 롤은 테이블을 생성할 수 있지만 동적 SQL을 이용하여 테이블을 생성할수 는 없다. 

      동적 SQL로 테이블을 생성하기 위해서는 CREATE TABLE 권한을 설정 해 주어야 한다.


 -- SYS 계정

  cmd>sqlplus sys/"암호" AS sysdba;

  sql>GRANT CREATE TABLE TO 사용자;


------------------------------------------------------------

EXECUTE IMMEDIATE dynamic_sql_string

         [INTO {define_var1 [, define_var2] ... | plsql_record }]

         [USING [IN | OUT | IN OUT] bind_arg1 [,

         [IN | OUT | IN OUT] bind_arg2] ...]; 

------------------------------------------------------------


CREATE  OR  REPLACE  PROCEDURE  dynTest

IS

    ssql   VARCHAR2(200);

    vid   NUMBER;

    vmemo  VARCHAR2(20);


    TYPE  my  IS  RECORD

    (

           id   NUMBER

  ,memo   VARCHAR2(20)

    );


    rec  MY;

BEGIN

     -- 테이블이 존재하면 테이블 제거

     FOR  temp  IN  (SELECT * FROM  tab  WHERE  tname='TEST') LOOP

             EXECUTE   IMMEDIATE   'DROP  TABLE  test  PURGE';

     END LOOP;


     -- 테이블작성

     ssql:='CREATE  TABLE  test(id NUMBER, memo  VARCHAR2(20))';

     EXECUTE   IMMEDIATE ssql;


     -- 데이터추가

     ssql:='INSERT  INTO  test  VALUES(:1, :2)';

     FOR  n  IN  1..5  LOOP

            vid:=n;

   vmemo:=CHR(n+64);


   EXECUTE   IMMEDIATE  ssql  USING  vid, vmemo;

     END LOOP;


     -- 데이터 출력

     ssql:='SELECT  *  FROM   test  WHERE  id=1';

     EXECUTE   IMMEDIATE  ssql  INTO  rec;

     DBMS_OUTPUT.PUT_LINE(rec.id || '   ' || rec.memo);

END;

/



EXEC  dynTest;

SELECT  *  FROM  tab;

SELECT  *  FROM  test;



'오라클' 카테고리의 다른 글

EXERD 모델링 프로그램  (0) 2013.06.10
사용자 관리(권한,조건확인 등)  (0) 2013.06.08
데이터 링크  (0) 2013.06.08
커서(Cursor)  (0) 2013.06.06
트리거(TRIGGER)  (0) 2013.06.06