创建一个与合并监视表的触发器
我需要创建一个触发器来监视此表:
CREATE TABLE "REFERENCE"
( "NUM_CONTRACT" VARCHAR2(20 CHAR),
"NATURE" VARCHAR2(20 CHAR),
"PR" VARCHAR2(14 CHAR),
)
我只想将最后一个修改的日期存储在此表中:
CREATE TABLE EVENT_REFERENCE (
ID NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL,
reference VARCHAR(14) NOT NULL UNIQUE,
date_modification TIMESTAMP(6),
PRIMARY KEY (ID)
)
我使用合并来避免使用相同的参考和不同日期的重复行。我只想保留我创建此触发器的每个参考行的最后一个修改日期
,但是IDK有什么问题。谁能帮我吗?
CREATE OR REPLACE TRIGGER TRG_REFERENCE
AFTER INSERT OR UPDATE ON REFERENCE
FOR EACH ROW
DECLARE
PRAGMA autonomous_transaction;
BEGIN
IF INSERTING
THEN
MERGE INTO EVENT_REFERENCE hist
USING (select :new.pr
from dual) t1
ON (t1.pr=hist.reference)
WHEN MATCHED THEN
UPDATE SET hist.date_modification=systimestamp
WHEN NOT MATCHED THEN
INSERT INTO EVENT_REFERENCE (REFERENCE, DATE_MODIFICATION)
VALUES (:NEW.prm, systimestamp);
END IF;
COMMIT;
END;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您有:
:new.prm
应该是:new.pr
插入event_reference(reference,date_modification)
何时只需要>插入(参考,date_modification)
您还使用
插入或更新
后,然后检查如果插入为什么不只是在插入之后不使用?
固定的代码:
db<> fiddle
You have:
:NEW.prm
when it should be:NEW.pr
INSERT INTO EVENT_REFERENCE (REFERENCE, DATE_MODIFICATION)
when you just needINSERT (REFERENCE, DATE_MODIFICATION)
You also use
AFTER INSERT OR UPDATE
and then checkIF INSERTING
why not just useAFTER INSERT
?The fixed code:
db<>fiddle here