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

Вниз

Проблема использования 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-30812
ded_di
2002-05-31 13:07
2002.06.10
про прозрачность в Image


1-30761
EternalWonderer
2002-05-30 15:12
2002.06.10
Автоматическое закрытие Word после печати.


6-30942
Hecker
2002-03-28 17:42
2002.06.10
Определение адреса машины с открытым портом...


4-31049
CrazyTemo
2002-04-09 10:33
2002.06.10
processor frequency


1-30874
Dishar
2002-05-28 23:20
2002.06.10
PageControl и TabSheet...