[英]Oracle APEX - AFTER INSERT, UPDATE another table trigger
我正在尝试将purchaseOrder表中的一些详细信息插入到poPayment表中,然后在insert order上插入,首先要
purchase.purchaseorderid中添加了purchaseorder.purchaseorderid
完成这项工作后,我想扩大触发器
这是采购订单表;
CREATE TABLE purchaseOrder
(
purchaseOrderid NUMBER (6) NOT NULL,
staffid NUMBER (6),
rawMaterialid2 NUMBER (6) NOT NULL,
supplierContactid2 NUMBER (6),
orderDate DATE NOT NULL,
dueDate DATE,
pricePerUnit NUMBER (7,2),
qty NUMBER,
total NUMBER (7,2),
CONSTRAINT purchaseOrderid PRIMARY KEY(purchaseOrderid)
);
这是采购订单付款表;
CREATE TABLE poPayment
(
poPaymentid NUMBER (6) NOT NULL,
purchaseOrderid NUMBER (6) NOT NULL,
staffid NUMBER (6) NOT NULL,
paymentDate DATE,
amountPaid NUMBER (7,2),
qtyOrdered NUMBER (6),
qtyDelievered NUMBER (6),
invoiceAmount NUMBER (6),
dateDelivered DATE,
CONSTRAINT pk_poPaymentid PRIMARY KEY(poPaymentid)
);
这是我尝试的触发器
CREATE OR REPLACE TRIGGER createPOpayment_trg
ON purchaseorder
AFTER INSERT
AS BEGIN
INSERT INTO popayment (purchaseorderid)
SELECT
purchaseorder.purchaseorderid
FROM purchaseorder
WHERE purchaseorder.purchaseorderid = popayment.purchaseorderid
END
感谢Brian
create trigger
语句的语法不正确; AFTER INSERT' needs to be before the
ON Purchaseorder (购买订单 )部分AFTER INSERT' needs to be before the
(语法图中的dml_event_clause )。 您还希望它是行级触发器,因此它会为您插入表中的每一行触发。
CREATE OR REPLACE TRIGGER createPOpayment_trg
AFTER INSERT
ON purchaseorder
FOR EACH ROW
AS
...
但是,您当前的插入内容也会出现格式错误。 这将行插入popayment
在每一行purchaseorder
已经有一个匹配的popayment
行-这是要复制所有现有行,而不是创建一个新的采购订单。
您只想插入与插入的采购订单匹配的一行。 并且您至少需要包括所有非空列:
BEGIN
INSERT INTO popayment (poPaymentid, purchaseorderid, staffid)
VALUES (popayment_seq.nextval, :new.purchaseorderid, :new.staffid);
END;
我猜(并希望)您有一个序列来填充poPaymentid
主键。 其他两个值使用:new
伪记录来自插入的purchaseorder
订单记录。 您不想查询要插入的表。
如果密钥是由它自己的触发器设置的,那么您只需要提供另外两个非空列(以及以后添加的任何其他列):
BEGIN
INSERT INTO popayment (purchaseorderid, staffid)
VALUES (:new.purchaseorderid, :new.staffid);
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.