Я пытаюсь создать триггер, который при удалении строки из таблицы, она будет вставлена в другой таблице:SQL на Delete Trigger
1 Create Or Replace Trigger cancel
2 After Delete
3 On OrderTable
4 For EACH ROW
5 Begin
6 Insert Into CancelledOrders Values (:old.acctNum, age, phone)
7 From OrderTable Natural Join Customer
8 Where acctid = :old.acctNum AND menuid = :old.menuNum;
9 End;
10/
11 Show Errors;
Я хочу, чтобы захватить acctNum
, age
и phone
. acctNum
из таблицы заказов, но age
и phone
из таблицы Заказчика. Поэтому я присоединяюсь к двум таблицам (по ключу acctid
). Таким образом, присоединился результат будет выглядеть следующим образом:
acctNum Age Phone
Я получаю эту ошибку, когда я пытаюсь скомпилировать Trigger:
2/2 PL/SQL: SQL Statement ignored
3/2 PL/SQL: ORA-00933: SQL command not properly ended
Кто-нибудь знает эту проблему?
EDIT: Структура таблицы:
OrderTable: AcctNum MenuNum startOrder endOrder
клиентов Таблица: AcctNum age phone
В 'where', где вы делаете': old.acctNum' относится только к таблице, где строки были удалены правильно? Он знает таблицу, из которой строки были удалены? – CapturedTree
@ 1290 - ': old' относится к псевдозапуску, так как это триггер' для каждой строки '. Таким образом, он будет использовать значение формы строки, которая удаляется, да. Он не запрашивает эту таблицу напрямую. О, подождите, да, но это не должно быть, мне нужно это исправить - можете ли вы добавить структуры таблицы к вопросу, чтобы я мог видеть, что происходит от каждого? –
О, я вижу сейчас. Но так как я присоединился к таблицам, удаленная строка (из OrderTable) будет соединена из другой строки в таблице Customer. Таким образом, в основном старые будут ссылаться на эту комбинированную строку с удалёнными значениями из таблицы заказов. – CapturedTree