아래 절차를 사용하여 한 테이블의 데이터를 다른 테이블에 보관합니다.DB와 같은 예외 처리 방법 저장 프로 시저
create or replace PROCEDURE CHECK_TWO AS
v_insert_count number;
v_delete_count number;
v_initial_count number;
BEGIN
SELECT count(*) into v_initial_count from process_state where tstamp BETWEEN ADD_MONTHS(trunc(SYSDATE,'MONTH'), -12) AND LAST_DAY(TRUNC(SYSDATE, 'MONTH') - 4);
dbms_output.put_line(v_initial_count);
insert into process_state_archive select * from process_state where tstamp BETWEEN ADD_MONTHS(trunc(SYSDATE,'MONTH'), -12) AND LAST_DAY(TRUNC(SYSDATE, 'MONTH') - 4);
v_insert_count := sql%rowcount;
dbms_output.put_line(v_insert_count);
delete process_state where tstamp BETWEEN ADD_MONTHS(trunc(SYSDATE,'MONTH'), -12) AND LAST_DAY(TRUNC(SYSDATE, 'MONTH') - 4);
v_delete_count := sql%rowcount;
dbms_output.put_line(v_delete_count);
if v_insert_count = v_delete_count AND v_initial_count= v_insert_count then
commit;
else
rollback;
end if;
END CHECK_TWO;
이 과정에서 서버 사용 불가 또는 데이터베이스 다운 또는 다른 환경 관련 문제와 같은 예외를 처리하고 싶습니다. 내 저장 프로 시저에서 이러한 시나리오를 처리하는 방법. 누구든지 말해 주시겠습니까 ??
고마워요. :) 한 가지 더요, 복사 사이에, 더 적은 레코드가 process_state 테이블에 추가 된 경우이 절차는 최근에 추가되는 새 레코드를 복사합니까? – vkreddy
프로 시저는 insert 문이 호출 될 때까지 테이블에 있던 모든 것을 아카이브합니다. – danish