Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Вызов "произвольной" процедуры в триггере   Найти похожие ветки 

 
tech ©   (2006-01-08 03:24) [0]

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


 
Fay ©   (2006-01-08 05:05) [1]

2 tech ©   (08.01.06 3:24)

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

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

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


 
Desdechado ©   (2006-01-08 14:55) [2]

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


 
tech ©   (2006-01-08 16:42) [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 17:52) [4]

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


 
tech ©   (2006-01-08 20:16) [5]

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



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
3-1136463543
Нютик
2006-01-05 15:19
2006.03.05
Дроби в Аксесе!!!!


5-1126106842
TStas
2005-09-07 19:27
2006.03.05
Редактор нестандартного свойсва


1-1138730854
md
2006-01-31 21:07
2006.03.05
Canvas


15-1139547961
QwertyKz
2006-02-10 08:06
2006.03.05
Коврик для мышки весом 1 кг


2-1139920372
webpauk
2006-02-14 15:32
2006.03.05
ClientToScreen