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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
mila
Сообщения: 2
Зарегистрирован: 02 июн 2006, 15:00

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

Сообщение mila » 02 июн 2006, 15:09

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 02 июн 2006, 15:18

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

mila
Сообщения: 2
Зарегистрирован: 02 июн 2006, 15:00

Сообщение mila » 02 июн 2006, 15:46

ну, насчет первого не совсем согласна. оставим пока..
а вот про количество триггеров мне известно, но как задать последовательность я пока не нашла...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 июн 2006, 18:41

ну, насчет первого не совсем согласна. оставим пока..
это твое личное мнение, которое является ошибочным.

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

Ответить