2017-09-11 16 views
1

schema1에 emp 테이블이 있고 schema2에 emp_fianl이 있습니다.트리거 변형 오류

emp 
empid ename estatus 
1  abc incomplete 
2  xyz complete 
3  ifg incomplete 
4  mno incomplete 

Emp_final 
empid ename estatus 
2  xyz complete 

나는 SCHEMA1 emp 테이블 변경에 estatus 완료 할 때 Schema2 emp_final 테이블에 데이터를 삽입하는 트리거를 작성해야합니다. 저도 같은에 대한 트리거 아래 쓴 :

Create or replace trigger tri_emp_final 
After update on emp 
BEGIN 
IF :new.estatus='complete' then 
Insert into emp_final 
(select :old.empid,:old.ename,:new.estatus from schem1.emp); 
END IF; 
END; 
/

나는 위의 코드에 대한 오류 메시지가 돌연변이 얻고있다. emp 테이블에서 상태를 업데이트하려고 할 때. 저는 Java 개발자이고 Oracle, SQL에 대한 많은 경험이 없습니다. 아무도 도와 줄 수 있습니까?

+0

업데이트 후 업데이트 전에 시도하십시오 – SriniV

+2

이미 pseudo-columns : old.empid, : old.name 및 : new.estatus에 값이 있으므로 schem1.emp 테이블에서 아무 것도 선택할 필요가 없습니다. 이 쿼리는 잘못되었습니다. 작동한다면 schem1.emp 테이블의 모든 단일 행에 대해 동일한 데이터를 emp_final 테이블에 삽입했을 것입니다. –

+0

emp_final 테이블에 삽입되지 않음 – user8592197

답변

0

사용하는

Create or replace trigger tri_emp_final 
After update on emp for each row 
BEGIN 
    IF :new.estatus='complete' then 
    Insert into emp_final (empid , ename , estatus) 
    Values 
    (:old.empid,:old.ename,:new.estatus); 
    END IF; 
END; 
/

당신은 작동하는 데모를 here

+0

ORA-04082 : 테이블 수준 트리거에서 NEW 또는 OLD 참조가 허용되지 않습니다. – user8592197

+0

트리거가'각 행'에 있어야하며 응답을 업데이트했습니다. – krokodilko

+0

ORA-04098 : 트리거 'TR_ODS.UPDATE_TEST_TRIG'이 (가) 유효하지 않으며 재확인에 실패했습니다. – user8592197

0

우선을 찾을 수 있습니다 : 과거와 현재 : 우리가 사용하고자하는 새로운 트리거는 각 행에 대해해야합니다. 그래서 당신은 변경해야합니다 : before update on emp for each row. 둘째 : Goran Stefanović가 쓴 것처럼, 당신은 단지 : : 오래된 값을 사용하여 삽입하도록 선택하지 마십시오.