2012-03-26 3 views
0

동일한 테이블에서 실행되는 두 개의 삽입 트리거가 있으며 테이블 행 내용을 변경하려고 시도한 다음 충돌이 발생하거나 SQL 개발자가 명령 실행을 끝내고 그럼 내가 DB를 다시 시작해야합니다. 어떻게 고칠 수 있니? 내가 2 트리거를 1 트리거로 병합해야합니까?오라클 트리거 (충돌 및 데드 클럭) 발생

execute immediate 'alter trigger trigger_name disable'; 
execute immediate 'alter trigger trigger_name enable'; 

또는 내가 큰 dilema에서 .. 메신저 이것에 대한 전문가 oppinion를 원하는주십시오 처음이기 때문에 내가 지금 .. 트리거 내부 트리거를 사용한다 : 또는이 명령을 fireing 순서를 제어하려고한다 나는 PL/SQL 코딩을 할 시간.

편집 :

create or replace 
TRIGGER TRG_PROCED_SN_INS_CENA 
AFTER INSERT ON STAVKA_NARUDZBENICE 
FOR EACH ROW 
DECLARE 
pragma autonomous_transaction; 
sifra_narudzbenice NUMBER; 
BEGIN 
paket_sn_sifnar.sifra_narudzbenice := :NEW.sifra_narudzbenice; 
pStavkaNarudzbeniceInsert(paket_sn_sifnar.sifra_narudzbenice); 
COMMIT; 
END; 
/

create or replace 
TRIGGER TRG_SN_INS_UPD_NAZIV 
AFTER INSERT ON Stavka_narudzbenice 
FOR EACH ROW 
FOLLOWS TRG_PROCED_SN_INS_CENA 
DECLARE 
v_naziv_proizvoda VARCHAR2(25); 
v_cena NUMBER; 
BEGIN 
SELECT naziv_proizvoda INTO v_naziv_proizvoda 
FROM proizvod 
WHERE sifra_proizvoda=:NEW.sifra_proizvoda; 
SELECT cena INTO v_cena 
FROM stavka_kataloga 
WHERE sifra_proizvoda=:NEW.sifra_proizvoda; 
UPDATE stavka_narudzbenice 
SET naziv_proizvoda = v_naziv_proizvoda, cena = v_cena WHERE sifra_proizvoda =:NEW.sifra_proizvoda; 
END; 
/

답변

4

11G에서 FOLLOWS 절을 사용하여 트리거 순서를 제어 할 수 있습니다. 예를 들면 :

CREATE TRIGGER trg1 
AFTER INSERT ON EMP 
FOR EACH ROW 
BEGIN 
... 
END; 

CREATE TRIGGER trg2 
AFTER INSERT ON EMP 
FOR EACH ROW 
FOLLOWS trg1 
BEGIN 
... 
END; 

즉이 모두 불 테이블 EMP에 삽입 한 후, 우리는 TRG2가 (후속) TRG1 후 해고해야한다고 선언 한 TRG1 및 TRG2을 트리거가 있습니다.

+0

참으로 11g 데이터베이스를 사용하므로 트리거 내부에서 트리거가 실행됩니까? –

+0

또는 트리거 EMP가 실행 완료된 후 trg1이 실행됩니까? –

+0

업데이트 된 답변보기, 명확 해 주시기 바랍니다. –

2

당신은 문 수준의 화재를 유발하는 순서를 제어 할 수 없습니다 : 여기에서 작동 마녀 트리거 내용입니다. 가장 좋은 방법은 두 개를 하나의 트리거로 결합하는 것입니다. 가능한 경우 트리거를 사용하지 마십시오.

+0

저는 학교 프로젝트 인 트리거 사용을 피할 수 없습니다. 우리는 모두 책으로합니다.이 경우 트리거가 필요합니다. 그래서 그것들을 하나의 방아쇠로 합칠 것을 제안합니까? –

+0

그러면 그들을 결합해야합니다. – DCookie

+1

그리고 이것이 학문적 인 운동이며, 실생활에서 그들을 피하기 위해 힘차게 노력해야한다는 것을 명심하십시오. 발생한 문제는 트리거가 발생할 수있는 일에 대한 교훈이어야합니다. – DCookie