-3
CREATE MATERIALIZED VIEW ORDERS_MV
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND AS
SELECT * FROM ORDERS;
---------------------------------------

CREATE OR REPLACE TRIGGER update_ship_receive
INSTEAD OF INSERT ON ORDERS_MV
FOR EACH ROW
BEGIN
  UPDATE ORDERS SET EXPECTED_SHIP_DATE = ORDER_DATE+5;
  UPDATE ORDERS SET EXPECTED_RECEIVE_DATE = SHIP_DATE+1 
WHERE SHIPPING_METHOD = '1 DAY';
  UPDATE ORDERS SET EXPECTED_RECEIVE_DATE = SHIP_DATE+2
 WHERE SHIPPING_METHOD = '2 DAY';
  UPDATE ORDERS SET EXPECTED_RECEIVE_DATE = SHIP_DATE+5 
WHERE SHIPPING_METHOD = 'GROUND';
END;
/
4

3 に答える 3

4

Oracleはテーブル構造を見ることができます。できません。Oracleがあなたのコードに問題を見つけているに違いない。

エラーのある最初の行を指している必要があります。そうでない場合は、user_errorsから*を選択します。

おそらく、ORDERSテーブルにSHIP_DATEがありません(最初のステートメントがEXPECTED_SHIP_DATEについて説明しているため)。

于 2011-03-04T05:54:14.317 に答える
3

オラクルの男ではありませんが、使用すべきではありません

:OLD.SHIP_DATE

また

:NEW.SHIP_DATE

:OLD.ORDER_DATE

また

:NEW.ORDER_DATE

参照:Oracleのトリガードキュメント

于 2011-03-04T05:32:14.560 に答える
1

申し訳ありませんが、注文テーブルにo BEFORE INSERTトリガーを作成してみませんか?BEFORE INSERTトリガーを作成するときに、注文テーブルに新しい行を追加する場合は、.NEW.EXPECTED_SHIP_DATE、.NEW.EXPECTED_RECEIVE_DATE更新注文テーブルを使用できます。注文のマテリアライズドビューを作成しないでください

于 2011-03-04T07:55:29.330 に答える