Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Вниз

Проблема использования IMMEDIATE в IB   Найти похожие ветки 

 
Slawik   (2002-05-18 13:08) [0]

Необходимо на уровне хранимой процедуры выполнять достаточно большой набор действий абсолютно одинаковых по сути для одной и тойже таблицы но для разных полей (тип полей одинаков).
Содал тестовую процедуру, но компиляции она не поддаеться, как только встречаеться IMMEDIATE:

CREATE PROCEDURE NEW_PROCEDURE (
NEW_PARAM INTEGER)
RETURNS (
OUT_PARAM INTEGER)
AS
DECLARE VARIABLE TMPFIELD VARCHAR(50);
declare variable TMP_SQL varchar(250);
begin
if (new_param = 0) then tmpfield = "NUM_BUY";
if (new_param = 1) then tmpfield = "NUM_SALE";
if (new_param = 2) then tmpfield = "NUM_CONVERT";

TMP_SQL = "select"|| :TMPFIELD ||"from CURR_CLIENT";

execute immediate :TMP_SQL
into :OUT_PARAM;

suspend;
end

Что я делаю не так?
EXECUTE IMMEDATE для IB описана еще в версии 5.5.


 
Desdechado   (2002-05-18 13:20) [1]

цитата из LangRef.pdf
The SQL statement to execute must be stored in a host variable or be a string literal. It
can contain any SQL data definition statement or data manipulation statement that does
not return output
.


 
Romkin   (2002-05-18 13:21) [2]

Такой конструкции в IB просто нет


 
Johnmen   (2002-05-18 13:24) [3]

Использование параметров и переменных для макроподстановки недопустимо...


 
Slawik   (2002-05-18 13:33) [4]

У меня "коробка" IB 5.5 и в описаниии никаких ограничений не указано, кроме того при компилировании процедуры IB уже ругаеться что не извесный оператор IMMEDIATE, а по сути он еще не знает что в стринговой переменной, оператор INTO комментировал, результат тот же!

Но такие ограничения мне знакомы (теоритически) но проверки не подвергались ....

Получаеться прийдеться множить текст процедуры под каждое поле?


 
Slawik   (2002-05-18 13:37) [5]

>Romkin
>Такой конструкции в IB просто нет

Как же нету, если она описана (официальная дока), но вот заставить работать не получаеться.


 
kaif   (2002-05-18 14:14) [6]

Execute immediate описана наряду с такими командами, как Execute и Prepare. Все эти команды, как я полагаю, не являются частью синтаксиса внутри хранимых процедур, а используются в СИ в конструкциях клиентской части:
EXEC SQL
EXECUTE IMMEDIATE :insert_date;
Я думаю IB вообще не допускает макроподстановок нигде на уровне синтаксиса базы. Иначе он потерял бы возможность отслеживать DEPENDENCIES, которые не позволяют удалить таблицу, если ее поле используется где-то в хранимых процедурах.
Такого ограничения нет в MSSQL, но зато нет и соответствующей ссылочной целостности метаданных. То есть в MSSQL можно удалить таблицу, используемую в хранимых процедурах и сервер этого никак не заметит.


 
Johnmen   (2002-05-18 14:19) [7]

Тоя проблема не в IMMEDIATE, а в Johnmen © (18.05.02 13:24).


 
kaif   (2002-05-18 14:26) [8]

>2 Johnmen
А вообще макроподстановку использовать в хранимой процедуре допустимо? Я никогда не пробовал... Неужели это может заработать?

CREATE PROCEDURE AAA
AS
DECLARE VARIABLE BBB VARCHAR(250)
BEGIN
BBB = " PROCEDURE CCC";
EXECUTE :BBB;
END
^


 
Johnmen   (2002-05-18 14:50) [9]

>kaif © (18.05.02 14:26) : В IB - НЕТ.



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

Форум: "Базы";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-30813
Xristos
2002-05-31 10:06
2002.06.10
НАРОД!!! Как это можно сделать???...


3-30714
eco
2002-05-18 15:14
2002.06.10
Разработка компонента БД


6-30951
vilka
2002-03-31 14:50
2002.06.10
Как определить IP по URL


6-30941
Renton
2002-03-16 20:41
2002.06.10
Запрет/Разрешение на Интернет


1-30789
den12
2002-05-31 09:18
2002.06.10
Как получить свойства объекта





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