2012-09-17 2 views
1

나는 SQL INSERT INTO 라인 수천 개의 스크립트 파일이 있습니다. 이 줄 중 일부는 이미 데이터베이스에있는 데이터를 삽입하므로 이러한 오류를 catch하고 무시합니다. 방아쇠가 던져 놓은 오류를 잡아 내고 그것을 무시하는 방법이 있습니까?PL SQL 처리 트리거 오류가

ERROR at line 1: 
ORA-20053: Username must be unique 
ORA-06512: at "MY_TRIGGER", line 18 
ORA-04088: error during execution of trigger 'MY_TRIGGER' 
ORA-06512: at line 3 

은 내가 DUP_VAL_ON_INDEX 잡기 후 NULL을 수행하여 고유 제한 조건이 작업을 수행 할 수 있지만, 이것은 위의 트리거 오류가 작동하지 않습니다.

+0

고려해야 할 또 다른 옵션 : 기본 테이블로 다음 임시 테이블에 삽입합니다. 중복 된 사용자 이름에는 첫 번째로 생성 된 사용자 이름을 유지하거나 보관하려는 다른 열이있을 수 있습니다. 임시 테이블 경로를 사용하여 일종의 데이터 정리 기능을 사용하면 이러한 작업이 훨씬 쉬워집니다. –

답변

1

당신은 당신의 자신의 예외는 dup_val_on_index 같은 기본 예외 핸들러 중 하나를 사용 하듯이 사용을 정의 할 수 있습니다. 그들은 단지 트리거가 플래그를 시도시키는 다음 오류를 무시하기보다는 이미 존재하지 않는 행을 삽입 할 수 있도록

DECLARE 
    l_unique_username_ex exception; 
    pragma exception_init(l_unique_username_ex, -20053); 
BEGIN 
    <<your INSERT statement>> 
EXCEPTION 
    WHEN l_unique_username_ex 
    THEN 
    NULL; -- Ignore the error 
END; 

는 일반적으로하지만, 그것은 당신의 스크립트를 수정 더 의미가있다.

+0

고마워,이 작품! – user1636922