안녕하세요 오라클 프로시져를 만들고 있어요 먼저 테이블 리스트를 조회하는 cursor를 만들고 c1 에서 첫번째 테이블명을 가지고 온값으로 두번째로 테이블의 컬럼리스트를 조회하는 cursor를 c2 를 만들어서 select insert문을 만들어서 c1 테이블의 리스트만큼 insert를 하고 싶어요 컴파일 오류가 pls-00103 encountered the symbol c2 when expecting one of the following 이라고 나오네요 회사 pc로 접속이 안되어서 스마트폰으로 등록을 해서 소스 올리기가 어렵네요
이제 접속이 되네요.
CREATE OR REPLACE PROCEDURE MIG_TEST02(
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 test_mig02 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;
DECLARE CURSOR c_list1 IS
SELECT col.column_name AS field , count(col.column_name) over( partition by col.table_name ) cnt
FROM all_tab_columns col,
all_col_comments cmmnts
WHERE col.owner = cmmnts.owner
AND col.table_name = cmmnts.table_name
AND col.column_name = cmmnts.column_name
AND col.table_name = v_tablist.t_name
ORDER BY COLUMN_ID ASC;
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 MIG_TEST02;
오류가 아래처럼 나오네요.
PROCEDURE created with compilation error.
61/1 PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following:
begin case declare end exit for goto if loop mod null pragma
raise return select update while with <식별자>
<큰 따옴표로 구분된 식별자> <바인드 변수> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe