Why does this trigger fail? It says invalid identifier

帅比萌擦擦* 提交于 2019-12-04 07:11:12

问题


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;
/

回答1:


Oracle can see your table structures. We can't. I'm betting Oracle sees the problem in your code.

It should point to the first line with the error. If not, select * from user_errors;

Maybe your ORDERS table doesn't have SHIP_DATE (since the first statement talks about EXPECTED_SHIP_DATE).




回答2:


Not an Oracle guy, but shouldn't you use

:OLD.SHIP_DATE

or

:NEW.SHIP_DATE

and

:OLD.ORDER_DATE

or

:NEW.ORDER_DATE

refer: Oracle's trigger doc




回答3:


I'm sorry,Why not create o BEFORE INSERT trigger on orders table? when create BEFORE INSERT trigger,if add a new row in orders table,Can use .NEW.EXPECTED_SHIP_DATE,.NEW.EXPECTED_RECEIVE_DATE update orders table. Don't create materialized view on orders



来源:https://stackoverflow.com/questions/5190026/why-does-this-trigger-fail-it-says-invalid-identifier

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!