pl/sql 예외처리 어떻게 해야할까요.. 0 1 556

by 쿼리야 [PL/SQL] [2020.02.17 11:49:19]


안녕하세요. 테이블을 카운트하여 저장하는 쿼리를 작성하고 있습니다.

저장 대상 : 로컬 디비, 원격지 디비

DECLARE
v_ow varchar2(50);
v_tn varchar2(50);
cursor cr_gt is
select distinct owner,table_name
from all_tables
where owner in ('USER1','USER2','USER3');
begin
open get_tables;
loop
    fetch cr_gt into v_tn,v_ow;
    EXIT WHEN get_tables%NOTFOUND;
    execute immediate 'INSERT INTO sum_table
    SELECT ''distinct1'',''' || v_ow || ''' , ''' || v_tn ||''',COUNT(*),sysdate   FROM ' || v_ow||'.'||v_tn||'@12c';
    execute immediate 'INSERT INTO sum_table
    SELECT ''distinct2'',''' || v_ow || ''' , ''' || v_tn ||''',COUNT(*),sysdate   FROM ' || v_ow||'.'||v_tn;
end loop;
   commit;
CLOSE
cr_gt;
END;
/

 

문제는 로컬 디비와 원격지 디비에 테이블이 동일하지 않습니다.(같은 테이블도 있지만 다른 테이블도 존재)

그래서 "(ORA-00942) table or view does not exist" 에러가 발생합니다.

위 pl/sql은 모두 같은 테이블명을 지닐때는 문제가 없습니다만, 각각 고유의 테이블이 존재한다면 에러가 발생합니다.

 

예외 처리를 어떻게 하는 것이 좋을지 조언 부탁드립니다.

by 마농 [2020.02.17 13:20:58]

PL/SQL 은 (BEGIN, EXCEPTION, END)로 이루어진 블럭 구조로 되어 있습니다.
블럭은 서브블럭을 포함할 수 있습니다.
각각의 서브블럭에서 Exception 처리하시면 됩니다.
예외처리는 위와 같이 하시면 되지만.
애초에 커서를 각각 선언허여 별도로 해야 맞을 듯 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입