【发布时间】:2015-03-31 19:37:27
【问题描述】:
我有一个数据库,其中包含这两个表:
NARUDZBENICA(**SIFANAR**,DATUM,NAZIV,*SIFRADOB,SIFRAKATALOGA,SIFRAZAP,SIFRANACISP*)
DOBAVLJAC(**SIFRADOB**,NAZIV,MAIL,TELEFON,FAKS)
当我在 SIFRADOB 是主键的 DOBAVLJAC 上更改列“naziv”时,我需要一个语句触发器来更新表 NARUDZBENICA 中所有行中的列“naziv”,其中 SIFRADOB 以“0”开头。
这是我想出的:
CREATE OR REPLACE TRIGGER "STATEMENT_DOB"
AFTER UPDATE OF NAZIV ON DOBAVLJAC
BEGIN
EXECUTE IMMEDIATE 'ALTER TRIGGER UPDATE_NAR_FRB DISABLE';
UPDATE NARUDZBENICA
SET NAZIV = (SELECT :OLD.NAZIV FROM DOBAVLJAC)
WHERE ROWNUM > 1 AND SIFRADOB = '%0';
EXECUTE IMMEDIATE 'ALTER TRIGGER UPDATE_NAR_FRB ENABLE';
END;
【问题讨论】:
-
alter语句是 DDL 并隐式提交;而且您不能在触发器中提交。在这种情况下,您可能可以在您禁用的触发器中放置一些逻辑来阻止它触发。还有其他几个问题。但不确定我是否真的遵循你在做什么。
标签: oracle plsql oracle11g triggers oracle-sqldeveloper