데이터베이스/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;

 

반응형