Форум: "Базы";
Текущий архив: 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.006 c