2014-12-16 3 views
-2

Я пытаюсь добавить триггер перед удалением пользователя (из таблицы пользователей (id, name, ...)), поэтому я также могу удалить телефонные номера пользователя (из user_phone (user_id, телефон) стол):Oracle Trigger before delete

CREATE TRIGGER users_before_delete 
BEFORE DELETE 
    ON users 
    FOR EACH ROW 
BEGIN 
    DELETE FROM user_phones WHERE user_id = :old.id; 
END; 
/

Однако я получаю эту ошибку: Внимание: Триггер создается с ошибками компиляции.

Я думаю, что это имеет какое-то отношение к: old.id?

EDIT: Даже с предупреждением, похоже, работает. Когда я удаляю пользователей, он также удаляет номера телефонов.

Спасибо.

+1

Вы можете запустить 'шоу errors' в SQLPlus и разделить вывод Здесь пожалуйста? – Mureinik

+1

таблица 'users_phone' (определенная в тексте вверху) не равна' user_phones' (таблица определена при удалении) ... Что это? должен 'delete FROM USERS_Phone, где user_Id =: old.id;'? Выполняет ли 'SELECT * из all_Tables, где table_Name = 'USER_PHONES' 'возвращает запись? как насчет 'SELECT * FROM ALL_TABLES WHERE TABLE_NAME = 'USERS_PHONE'' – xQbert

+0

Даже с предупреждением, похоже, работает. Когда я удаляю пользователей, он также удаляет номера телефонов. –

ответ

-1

при создании триггера, прежде чем удалить или вставить или обновить вы можете поместить этот код и манипулировать, как вам нравится я надеюсь, что это помогло вам немного

BEGIN 
if DELETING THEN .... 
END IF; 
END; 
+1

Включение до BETORE DELETE это условие всегда верно. Нет никаких оснований для его использования. –

+0

О, ваше право, это плохо. Если триггер был до удаления или вставки или обновления –