Oracle AFTER INSERT触发器未触发

时间:2013-04-07 18:19:30

标签: oracle select triggers insert

我的任务是在插入后创建一个触发器。以下是涉及的表格:

CREATE TABLE purchase(
orderid CHAR(3),
unit_price NUMBER(7,2),
sales_price NUMBER(7,2) DEFAULT NULL,
itemid CHAR(3)
);

这是触发器:

/* Now we need the AFTER trigger */
CREATE OR REPLACE TRIGGER DoubleSalesPrice
AFTER INSERT on purchase
FOR EACH ROW


DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
itemcount smallint;
BEGIN
    SELECT COUNT(itemid) INTO itemcount FROM purchase P WHERE P.itemid = :new.itemid;
IF (itemcount = 1) THEN
    UPDATE purchase P 
    SET P.sales_price = 2*P.unit_price
    WHERE P.orderid = :new.orderid;
end if;
end;
/

我已根据代码将此指定为AFTER INSERT。但是,当我插入购买时,我没有得到所需的结果:

INSERT INTO purchase VALUES( '100','250', '200', '500');
SQL> select * from purchase;

ORD UNIT_PRICE SALES_PRICE ITE
--- ---------- ----------- ---
100        250         200 500

看起来好像触发器没有被触发。我确保使用相同的结果启用它:

ALTER TRIGGER DoubleSalesPrice enable;
SQL> select * from purchase;

ORD UNIT_PRICE SALES_PRICE ITE
--- ---------- ----------- ---
101        250         200 500

如果有人有任何建议,请告诉我。在尝试实际问题之前,我通常喜欢构建小例子。这个镜像反映了我需要实现的功能。

1 个答案:

答案 0 :(得分:1)

这是一个autonomous transaction,您必须在其本地范围内提交它,也就是触发器本身。

我认为你不应该这样做,将它与插入本身分开(事务)是没有意义的。它应该与整个过程一致。