Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизВызов "произвольной" процедуры в триггере Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.016 c