Почему этот триггер не работает?Это говорит неверный идентификатор - PullRequest
0 голосов
/ 04 марта 2011
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;
/

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

Oracle может видеть ваши структуры таблиц. Мы не можем Бьюсь об заклад, Oracle видит проблему в вашем коде.

Он должен указывать на первую строку с ошибкой. Если нет, выберите * из user_errors;

Возможно, ваша таблица ORDERS не имеет SHIP_DATE (поскольку первый оператор говорит о EXPECTED_SHIP_DATE).

3 голосов
/ 04 марта 2011

Не парень из Oracle, но вы не должны использовать

:OLD.SHIP_DATE

или

:NEW.SHIP_DATE

и

:OLD.ORDER_DATE

или

:NEW.ORDER_DATE

см .: Документ Oracle для триггера

1 голос
/ 04 марта 2011

Извините, а почему бы не создать o ПЕРЕД ВСТАВКОЙ триггер на столе заказов? при создании триггера BEFORE INSERT, если добавить новую строку в таблицу заказов, можно использовать .NEW.EXPECTED_SHIP_DATE, .NEW.EXPECTED_RECEIVE_DATE обновить таблицу заказов. Не создавать материализованный вид для заказов

...