Страница 1 из 1

транзакции в триггерах

Добавлено: 02 июн 2006, 15:09
mila
Добрый день. помогите, кто может.
есть ситуация:
срабатывают два триггера before insert -> after insert
из второго триггера вызывается udf в которой возникает необходимость обработать данные, которые первый триггер вставил в таблицу(отличну ю от той, на которой эти два триггера).
проблема в том, что в udf не видны данные вставленные в эту таблицу.
я так думаю, это из-за того что разные транзакции....
в Udf и триггерах...
вопрос: можно ли как-нить закоммитить изменнения , сделанные первым триггером, чтобы в udf они были видны?
или штатными средствами это не делается??
заранее , спасибо

Добавлено: 02 июн 2006, 15:18
Dimitry Sibiryakov
UDF предназначены только для обработки тех данных которые передаются ей через параметры и никаких других. Все остальное делается триггерами и хранимыми процедурами.
Кстати, вы в курсе что триггеров before insert может быть много и они могут быть запущены в предсказуемом порядке?..

Добавлено: 02 июн 2006, 15:46
mila
ну, насчет первого не совсем согласна. оставим пока..
а вот про количество триггеров мне известно, но как задать последовательность я пока не нашла...

Добавлено: 02 июн 2006, 18:41
kdv
ну, насчет первого не совсем согласна. оставим пока..
это твое личное мнение, которое является ошибочным.

1. в udf нет никакого контекста коннекта или транзакции, в которой она вызывается.
2. в триггере after insert данные уже вставлены. Зачем их "обрабатывать" в этот момент - неясно.
3. вызов udf в триггере after insert для коннекта к серверу и обработки данных - это из анекдота про гланды через зад, приношу извинения за прямую и грубую цитату.
Естественно, данные НЕ будут видны, потому что транзакция, в которой вызывался триггер и udf, наверное еще не кончилась.