2013-01-16 1 views
1

Я сделал этот триггер:имени Корреляции «N» не найдено

ALTER TRIGGER "isok" AFTER INSERT 
ORDER 1 ON "dba"."orderz" 
REFERENCING NEW AS N 
FOR EACH STATEMENT 
BEGIN 
    INSERT INTO comments (order_id,user_id,com_content) VALUES (N.order_id,1,'OK'); 
END 

и SQL Anywhere не показывали ошибку, когда я спас его, но он делает сейчас, когда я хочу, чтобы вставить что-то в orderz таблицы:

имя корреляции «N» не найдено

Мой код, вероятно, неправильно, но я искал триггера, и я понятия не имею, как решить эту проблему. Все, что я хочу сделать, это создать новую строку в таблице comments с номером ID нового заказа.

Может ли кто-нибудь сказать мне, как написать выражение, которое будет охватывать его?

ответ

1

Вы должны заменить

FOR EACH STATEMENT 

с

FOR EACH ROW 

Если вы используете STATEMENT, то нет строки ссылаться, поскольку триггер будет срабатывать только один раз, даже если вставить десять строк в один раз.

+0

Спасибо, это действительно помогает :) Возможно, вы знаете страницу, которую я мог бы посетить, для получения более четкой информации о триггерах? Поскольку я не очень хорошо говорю по-английски, многие из них действительно запутывают меня. –

+0

@Maciej Во-первых, прочитав ваш вопрос и комментарий, я думаю, что ваше понимание английского языка достаточно хорошее. Во-вторых, помимо руководства Sybase SQL Anywhere я не знаю о хорошем ресурсе, нацеленном на эту конкретную СУБД: [http://dcx.sybase.com/1200/en/dbusage/ptitct.html](http://dcx. sybase.com/1200/en/dbusage/ptitct.html) –

+0

Возможно, вы захотите попробовать http://sqlanywhere-forum.sybase.com/, который является сайтом Q & A (под управлением SAP-Sybase), предназначенным для SQL Anywhere. –