我在图像中显示了以下表格。我需要创建一个触发器,该触发器将数据从PAYMENT表插入到AUDIT表中,其中包括有关付款方式的信息-进行付款的人(pay_from),处理付款的Oracle用户,约会ID(apt_id)和进行付款的患者(Patient_id)。
从上图中,PAYMENT表与APPOINTMENT表具有关系,而APPOINTMENT表又与PATIENT表具有关系。
我的问题是,如何使用触发器将APPOINTMENT表中的“ Patient_id”添加到我的AUDIT表中?这是我的代码:
CREATE OR REPLACE TRIGGER PAYMENT_AUDIT_TRIGGER
AFTER INSERT ON PAYMENT
FOR EACH ROW
BEGIN
INSERT
INTO AUDIT_LOG VALUES
(
AUDIT_LOG_AUDIT_ID_SEQ.NEXTVAL,
:new.PATIENT_ID,
:new.APT_ID,
USER,
SYSDATE,
:new.PAY_FROM
);
END;
在Oracle中这很容易,因为它同时具有触发器之前和之后。可以猜测,它们之间的差异是它们在执行时-恰好在操作之前或之后。
甲之前触发是用于拦截的输入流更复杂的数据检测和/或修改某些数据(例如,从在INSERT操作的序列生成密钥的值)是有用的。“之前”是指首先执行所有定义的完整性检查-类型检查,检查约束,引用约束等。因此,您可以知道数据已经通过所有这些检查。
一个后触发是用于记录刚刚发生的操作是有用的。如果存在任何阻止操作完成的错误情况,即使该操作可能已经通过了初始系统检查以及可能由前触发器执行的附加检查,则后触发器将不会执行。此触发器的一个方便功能是,向其显示的行将恰好是已插入/更新/删除的行。这意味着在INSERT触发器之后,任何生成的键值都将存在。
该描述适用于同时具有两种类型的触发器的Oracle和其他系统。SQL Server仅具有after触发器,尽管它最近已扩展了not触发器,以便与表一起使用-实际上,使其成为before触发器,尽管与“ normal”触发器有所不同,因此用户应阅读文档以了解相关信息这些差异。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句