안녕하세요
오라클 프로시져에서 cursor에서 테이블명을 조회해서 그 값으로 컬럼들을 조회하는 cursor를 이용해서
insert 문을 만들어서 실행하고 싶은데요.
아래 procedure 컴파일 오류가 나는데 원인을 잘 못 찾고 있어요.
cursor c_list1 에서 오류가 발생합니다.
아시는 분들의 답변을 주시면 감사하겠습니다.
CREATE OR REPLACE PROCEDURE CUR_TEST(
V_COL_NAME IN VARCHAR2
)IS
V_SQL long ;
V_SQL2 long ;
CURSOR c_tablist IS
select col01 as t_name , col02 as col_name from tab_list WHERE col02 = V_COL_NAME ;
BEGIN
FOR v_tablist in c_tablist
LOOP
DBMS_OUTPUT.PUT_LINE(v_tablist.t_name);
V_SQL2:= 'DELETE FROM '||v_tablist.t_name||' WHERE '||V_COL_NAME||' in(''506'')';
EXECUTE IMMEDIATE V_SQL2;
commit;
CURSOR c_list1 IS
SELECT col.column_name AS field ,
count(col.column_name) over( partition by col.table_name ) cnt
FROM tab_collist col
WHERE .table_name = v_tablist.t_name ;
BEGIN
V_SQL := 'INSERT INTO '||v_tablist.t_name||' SELECT ';
for v_list1 in c_list1
loop
if v_list1.cnt <> c_list1%ROWCOUNT then
if v_list1.field = V_COL_NAME then
V_SQL := V_SQL|| 'DECODE('||V_COL_NAME||',''502'',''506'','||V_COL_NAME||') AS '||V_COL_NAME||' ,' ;
else
V_SQL := V_SQL|| v_list1.field || ', ';
end if;
else
V_SQL := V_SQL|| v_list1.field ;
end if;
END loop;
V_SQL := V_SQL || ' FROM '||v_tablist.t_name||' WHERE '||V_COL_NAME||' IN( ''502'' )' ;
dbms_output.enable(1000000);
--DBMS_OUTPUT.PUT_LINE ( V_SQL );
EXECUTE IMMEDIATE V_SQL;
COMMIT;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END CUR_TEST; |