Главная страница
    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.006 c
1-30910
MaximatorVeter
2002-05-30 11:13
2002.06.10
Сдвиг блока исходного текста по горизонтали.


1-30795
Грифон
2002-05-28 19:00
2002.06.10
компонента для рисования 3-х мерных графиков


1-30759
hooky-mars
2002-05-26 21:01
2002.06.10
Икона для экзелника в ран-тайме


3-30671
Eugene
2002-05-16 07:32
2002.06.10
Есть табличка в формате Visual FoxPro, нужно переконвертировать


14-30981
dlp
2002-05-06 19:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский