繁体   English   中英

Oracle APEX-插入后,更新另一个表触发器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM