Oracle AFTER INSERT触发器未触发
我的任务是在插入后必须创建触发器。以下是涉及到的表:Oracle AFTER 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;
/
我指定以此为每个代码插入操作后。然而,当我插入购买,我没有得到期望的结果:
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
如果有人有任何建议,请让我知道。在尝试实际问题之前,我通常喜欢创建一些小例子。这个反映了我需要达到的功能。
这是一个autonomous transaction
,你必须在其本地范围内提交它,也就是说触发器本身。
我不认为你应该这样做,但它没有意义使它与插入本身分开(事务)。它应该承担整个过程。
有没有其他办法可以做到我需要的触发器?要求说明它需要成为触发器,所以我有点担心。 – DaGr8Gatzby 2013-04-07 19:05:48
是的,只需从您的代码中删除PRAGMA AUTONOMOUS_TRANSACTION – Sebas 2013-04-07 19:17:43
我放置了PRAGMA_AUTONOMOUS_TRANSCATION行来摆脱第一个问题。我现在正在发生突变表错误。 – DaGr8Gatzby 2013-04-07 19:25:04
这是提交问题吗?就是想。 – Sid 2013-04-07 18:22:10
我没有得到任何错误。我尝试了一次提交,然后整个触发器被轰炸。退出SQLPlus,再次运行它,没有问题。触发器不会触发。 – DaGr8Gatzby 2013-04-07 18:23:13
我没有听说SQL * Plus究竟做了什么'轰炸'。 – Sid 2013-04-07 18:24:56