데이터베이스/ORACLE
[ORACLE/오라클] 다이나믹 SQL 구현
또 뭘 잘못 코딩했을까
2022. 3. 16. 22:48
반응형
사이트를 다니다보면 가끔씩 컬럼에 SQL 문장 자체를 가지고 있는 경우가 있다.
Cursor로 행별 데이터를 받아 실행하는 로직을
익명 블록으로 구현함
/* 선언부 */
DECLARE
V_SQL VARCHAR2(4000);
--커서를 생성한다
--SELECT 결과값을 담는다.
CURSOR STR_SQL
IS
SELECT REPLACE(STR_SQL,';','')
FROM --INSERT SQL이 있는 테이블
INSERT_SQL;
/* 실행부 */
BEGIN
OPEN STR_SQL; --커서오픈
LOOP --루프 시작
FETCH STR_SQL INTO V_SQL; --루프를 돌면서 순차적으로 결과행을 V_SQL에 담는다.
EXIT WHEN STR_SQL%NOTFOUND; --커서에서 더이상 데이터가 없을 경우 루프를 빠져나간다.
EXECUTE IMMEDIATE (V_SQL); --문자열 SQL 실행
DBMS_OUTPUT.PUT_LINE('CNT :'||SQL%ROWCOUNT||' '||V_SQL);
COMMIT;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('COMPLETE');
CLOSE STR_SQL;
END;
반응형