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;
/
问问题
1116 次
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 回答