Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1137598739
2Wish
2006-01-18 18:38
2006.03.05
Abstract Error


2-1140185829
Arxangel
2006-02-17 17:17
2006.03.05
Начало работы с FoxPro


2-1140377663
Vit___
2006-02-19 22:34
2006.03.05
работа с edit


15-1139767047
palva
2006-02-12 20:57
2006.03.05
За что вы Ваньку-то Морозова...


2-1139947243
parovoZZ
2006-02-14 23:00
2006.03.05
Чем страшен Unsafe ... ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский