2012-03-26 10 views
0

2つの挿入トリガーがあり、同じテーブルで起動し、テーブル行の内容を変更しようとすると衝突が発生するか、SQLデベロッパーがコマンドの実行を終了します。私はDBを再起動する必要があります。それを修正する方法は?私はそれらの2トリガを1トリガにマージする必要がありますか?オラクル・トリガー(衝突、デッドクロック)

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

するか、私は大きな僕が結婚を決めたワケで。..イムこの1に関する専門oppinionをしたいしてください、これが最初であるので、私は、今...トリガーの内部でトリガを使用する必要がありますか、このコマンドでfireing順序を制御するようにしてください私はPL/SQLのコーディングを行う時間。

EDIT:HEREは、私が上で動作WITCH WITHトリガーは、次のとおりです。

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; 

すなわち2が両方とも火テーブルEMPに挿入した後、私たちは、TRG2は(フォロー)TRG1後に発射する必要があることを宣言したTRG1とTRG2をトリガーがあります。

+0

私は11gのデータベースを使用していますので、これはトリガー内でトリガを実行していますか? –

+0

、またはトリガーEMPの実行終了後にあなたの例のtrg1が実行されますか? –

+0

更新された回答を見て、それがより明確になることを望みますか? –

2

あなたは文レベルが火をトリガーする順序を制御することはできません。あなたの最善の策は、1つのトリガーに2つを組み合わせることです。可能であれば、トリガーの使用を避けてください。

+0

トリガの使用を避けることはできません。学校プロジェクトです。この場合、トリガが必要です。だから、それらを1つのトリガーにマージすることをお勧めしますか? –

+0

それからそれらを組み合わせる必要があります。 – DCookie

+1

これは学問的な演習であり、実生活ではそれを避けるために激しく努力するべきであることに留意してください。あなたが経験している問題は、トリガーで何が起こるかについての教訓でなければなりません。 – DCookie