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;
/
答案 0 :(得分:4)
Oracle可以看到您的表结构。我们做不到。我打赌Oracle会在您的代码中看到问题。
它应该指向带错误的第一行。如果没有,请从user_errors;
中选择*也许你的ORDERS表没有SHIP_DATE(因为第一个语句是关于EXPECTED_SHIP_DATE的)。
答案 1 :(得分:3)
不是Oracle人员,但你不应该使用
:OLD.SHIP_DATE
或
:NEW.SHIP_DATE
和
:OLD.ORDER_DATE
或
:NEW.ORDER_DATE
答案 2 :(得分:1)
对不起,为什么不在订单表上创建o BEFORE INSERT触发器?当创建BEFORE INSERT触发器时,如果在orders表中添加新行,可以使用.NEW.EXPECTED_SHIP_DATE,.NEW.EXPECTED_RECEIVE_DATE更新订单表。不要在订单上创建物化视图