develog

Dynamic Cursor 본문

DB/PLSQL

Dynamic Cursor

냐옴 2012. 4. 17. 13:08

DECLARE


    V_SQL                   VARCHAR2(512);

    V_CURSOR             NUMBER;

    V_EXECUTED NUMBER;


    V_COL1                 TB_TEMP.COL1%TYPE;

    V_COL2                 TB_TEMP.COL2%TYPE;

    V_COL3                 TB_TEMP.COL3%TYPE;


BEGIN


    V_SQL := '

    SELECT COL1, COL2, COL3

        FROM TB_TEMP

        WHERE COL4 = :1

        AND COL5 = :2

    ';


    --1. 커서 오픈

    V_CURSOR := DBMS_SQL.OPEN_CURSOR;

    

    --2. SQL 파싱

    DBMS_SQL.PARSE(V_CURSOR, V_SQL, DBMS_SQL.NATIVE);


    --3. 변수 바인딩

    DBMS_SQL.BIND_VARIABLE(V_CURSOR, '1', 'AAA');

    DBMS_SQL.BIND_VARIABLE(V_CURSOR, '2', 'BBB');


    --4. 컬럼 정의

    DBMS_SQL.DEFINE_COLUMN(V_CURSOR, 1, V_COL1, 10);

    DBMS_SQL.DEFINE_COLUMN(V_CURSOR, 2, V_COL2, 5);

    DBMS_SQL.DEFINE_COLUMN(V_CURSOR, 3, V_COL3);


    --5. 커서 실행

    V_EXECUTED := DBMS_SQL.EXECUTE(V_CURSOR);


    --6. 로우 패치

    WHILE DBMS_SQL.FETCH_ROWS(V_CURSOR) > 0

    LOOP

        DBMS_SQL.COLUMN_VALUE(V_CURSOR, 1, V_COL1);

        DBMS_SQL.COLUMN_VALUE(V_CURSOR, 2, V_COL2);

        DBMS_SQL.COLUMN_VALUE(V_CURSOR, 3, V_COL3);


        DBMS_OUTPUT.PUT_LINE(V_COL1 || ', ' || V_COL2 || ', ' || V_COL3);

    END LOOP;


    --7. 커서 닫기

    IF DBMS_SQL.IS_OPEN(V_CURSOR)

    THEN

        DBMS_SQL.CLOSE_CURSOR(V_CURSOR);

    END IF;


    DBMS_OUTPUT.PUT_LINE('DONE!');


END;


'DB > PLSQL' 카테고리의 다른 글

PLSQL split  (0) 2014.03.14
PLSQL 2차원 배열  (0) 2013.12.12
plsql random  (0) 2013.05.30
기본 구조  (0) 2012.04.17
Comments