挿入後にトリガーを作成する必要がありました。関連するテーブルは次のとおりです。
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
誰か提案があれば教えてください。私は通常、実際の問題に取り組む前に小さな例を作成するのが好きです。これは、私が達成する必要がある機能を反映しています。