Вызов sproc для каждой затронутой записи изнутри триггера в Sybase ASA 6

Просто некоторые головные боли реализовали что-то в триггере на старой версии Sybase и задавались вопросом, может ли кто-нибудь помочь. В двух словах, я хочу написать триггер, который будет вызывать другое sproc для каждой из затронутых записей (будет ли она вставлена, удалена или обе [обновлена]).

Один из способов сделать это в T-SQL (SQL Server) состоит в том, чтобы использовать курсор, но ни один из примеров курсоров, которые я нашел в Интернете, кажется, на самом деле не работает на Sybase ASA 6.0.4 - он либо не любит T-SQL в общем, или кажется, что компилируется, но обычно ничего не делает (даже с патологически простыми, надуманными сценариями).

По сути, я хочу пройтись по всем "вставленным" записям таблицы (если они есть) и для каждого Exec MySproc (вставлен. Ключ), затем пройти по всем "удаленным" записям таблицы (если есть), и снова для каждого один Exec MySproc (удаленный ключ).

У кого-нибудь есть пример такого рода действий или даже просто использование курсора только для чтения в ASA 6? Кажется, в онлайн-руководстве есть пример простого курсора, но на практике мне не удалось заставить этот пример работать на самом деле. Я мог бы развернуть другое sproc в триггер (это на самом деле не так уж сложно), но это слишком сложно, чтобы сделать это как часть выражения типа "выбрать из вставки..." - это действительно несколько строк кода по-своему, Поэтому я думаю, что мне все равно нужен курсор.

РЕДАКТИРОВАТЬ: (29/12/09) - В итоге я в отчаянии развернул код sproc, но я действительно хотел бы иметь пример работающего курсора в Sybase ASA 6, потому что рано или поздно я столкнусь с чем-то, что смогу " Т легко развернуть. Так что я брошу это за награду - кто-нибудь может дать мне рабочий пример?:-)

1 ответ

Решение

Звучит так, как будто вы ищете триггер ROW LEVEL.

По умолчанию триггеры в ASA имеют уровень оператора (триггер выполняется один раз после завершения всего оператора триггера). С другой стороны, триггеры уровня строки выполняются один раз для каждой изменяемой строки.

Вот пример триггера уровня строки:

CREATE TRIGGER tr_log
AFTER UPDATE OF "myfield"
ON mytable
REFERENCING OLD AS old_data NEW AS new_data

FOR EACH ROW

BEGIN
    Insert into Narc_USER_INFO_Change (Field_Changed, New_Value, Original_Value, user)
    Values('myfield', new_data.myfield,  old_data.myfield, CURRENT USER);
END
Другие вопросы по тегам