Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов "произвольной" процедуры в триггере [D6, D7, IB6.x, FireBird]


tech ©   (2006-01-08 03:24:00) 

Работа с FireBird.
Возможно ли в триггере вызвать процедуру UDF, имя которой "вычисляется" в самом триггере на основании неких данных. Количество таких процедур неограничено и непредсказуемо, поэтому прописать их в триггере нельзя. "Вычисленное" имя процедуры точно будет объявлено в одной из присоединенных UDF.


tech   (2006-01-08 20:16:00) [1]

Спасибо, все получилось


Desdechado   (2006-01-08 17:52:00) [2]

тренируй наблюдательность, найди различия в моей строке кода и своей


tech   (2006-01-08 16:42:00) [3]

Извините,
конечно, ФУНКЦИЮ UDF, а не процедуру.

Спасибо за идею, но:
Решение через EXECUTE STATEMENT реализовать не удалось, поскольку непонятно, как в выполняемой СТРОКЕ указать переменную, куда следует поместить результат. Вот тестовый код триггера:  

CREATE TRIGGER DMO_AD0 FOR DMO
ACTIVE AFTER DELETE POSITION 0
AS
declare variable fname varchar(20);
declare variable fres varchar(255);
declare variable fpar varchar(255);
begin
 fname = 'upcase';
 fpar = 'La-La-La';
 execute statement 'SELECT '||fname||'('''||fpar||''')'||' FROM rdb$database INTO :fres';

end

Пытался по-всякому приписать к строке fres - переменную, куда следует поместить результат - не удается. Подскажите, как сделать?


Desdechado   (2006-01-08 14:55:00) [4]

если тебе нужно в триггере сделать
x=неизвестная_заранее_UDF();
то так не выйдет
а вот DML-операцию провернуть можно через EXECUTE, свормировав ее "на лету"
хотя можно и изврат с присвоением сделать через
EXECUTE STATEMENT 'SELECT ' || твоя_UDF || ' FROM rdb$database' INTO :x;
только типы надо четко контролировать


Fay   (2006-01-08 05:05:00) [5]

2 tech ©   (08.01.06 3:24)

> вызвать процедуру UDF
Поаккуратнее с терминами. Я, к примеру, не понял.

> "Вычисленное" имя процедуры
Если здесь "процедура" = UDF, то можно вызвать её по имени, передав его в заранее известную UDF. Иначе - смотри ниже.

В общем случае
ниже:
задача имеет решения только с EXECUTE.
Подробности в http://firebird.sourceforge.net/download/prerelease/rlsnotes153_05.zip


Наверх

Титульная страница Поиск, карта сайта Написать письмо