【发布时间】:2012-04-09 23:57:06
【问题描述】:
我有 2 个插入触发器,它们在同一个表上触发,它们都尝试更改表行内容然后发生冲突,或者我的 sql 开发人员开始无休止地执行命令,然后我需要重新启动数据库。如何解决?我应该将这 2 个触发器合并为 1 个触发器吗?或者应该尝试用这个命令控制射击顺序:
execute immediate 'alter trigger trigger_name disable';
execute immediate 'alter trigger trigger_name enable';
或者我应该在触发器中使用触发器.. 请我想知道关于这个的专家意见.. 我现在处于两难境地,因为这是我第一次进行 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;
/
【问题讨论】:
标签: database oracle plsql triggers oracle11g