Главная страница
    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.46 MB
Время: 0.016 c
15-1139654316
s65
2006-02-11 13:38
2006.03.05
тест мини оперы


2-1140345028
antoxa2005
2006-02-19 13:30
2006.03.05
Можно ли во время закачки файла по HTTP отслеживать "ход процесса


6-1132634383
hed
2005-11-22 07:39
2006.03.05
Передача файла на apache сервер


2-1139933525
nyron
2006-02-14 19:12
2006.03.05
связка с excel


2-1140325625
delphi-oracle
2006-02-19 08:07
2006.03.05
Как изменить файл Read-Only?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский