-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 可以看到您的表结构。我们不能。我打赌甲骨文在您的代码中看到了问题。

它应该指向有错误的第一行。如果不是,则从 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 回答