1

挿入後にトリガーを作成する必要がありました。関連するテーブルは次のとおりです。

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

誰か提案があれば教えてください。私は通常、実際の問題に取り組む前に小さな例を作成するのが好きです。これは、私が達成する必要がある機能を反映しています。

4

1 に答える 1