我的任務是在插入後必須創建觸發器。以下是涉及到的表: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
如果有人有任何建議,請讓我知道。在嘗試實際問題之前,我通常喜歡創建一些小例子。這個反映了我需要達到的功能。
這是提交問題嗎?就是想。 – Sid 2013-04-07 18:22:10
我沒有得到任何錯誤。我嘗試了一次提交,然後整個觸發器被轟炸。退出SQLPlus,再次運行它,沒有問題。觸發器不會觸發。 – DaGr8Gatzby 2013-04-07 18:23:13
我沒有聽說SQL * Plus究竟做了什麼'轟炸'。 – Sid 2013-04-07 18:24:56