典型的な製品と出荷のデータベースについて、次のトリガーを実行する最良の方法を模索しています。
- 注文明細行が「完了」に設定されると、次のようなトリガーが実行されます。
- その注文の他の注文明細行を探します。
- その注文の他のすべての注文明細も「完了」の場合
- 注文ヘッダーテーブルを更新して完了します。
明確にするために: 注文ヘッダー テーブルには注文の合計が格納され、orderLines テーブルには注文の各製品が格納されます。
これまでのところ、トリガーは次のように記述されています。
CREATE OR REPLACE TRIGGER orderComplete
after update ON orderline
for each row
WHEN (new.orderline_fulfilled = 'Y')
DECLARE count NUMBER := 5;
ordersNotDone NUMBER;
BEGIN
SELECT COUNT(Orderline_fulfilled) INTO ordersNotDone
FROM orderHeader
JOIN orderline ON
orderHeader.Order_id = orderLine.Orderline_order
WHERE Order_id = :old.orderline_order
AND orderline_fulfilled = 'Y';
IF ordersNotDone = 0
THEN
UPDATE orderHeader
SET completed = SYSDATE
WHERE orderId = :old.orderline_order;
ENDIF;
END;
これにより、注文行の行を更新するときに突然変異エラーが発生します。