ОБЪЯВЛЕНИЕ ГЛОБАЛЬНОЙ ВРЕМЕННОЙ ТАБЛИЦЫ

#sql #db2-400 #temporary

#sql #db2-400 #временная

Вопрос:

DB2 / 400 SQL: Я работаю в функции sql, которая использует глобальную временную таблицу. У меня возникла проблема с объявлением этой таблицы: SQL отправляет мне сообщение об ошибке, но я не вижу, в чем проблема? Может кто-нибудь рассказать мне, что связано с этой ошибкой?

Функция с объявлением глобальной временной таблицы

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос, чтобы включить текстовую версию инструкции и ошибки, а не картинку. Таким образом, мне не нужно отсеивать лишние биты, и я могу вырезать и вставить это в свой клиент для тестирования.

2. Функция создается, когда я отключаю строки объявления моей временной таблицы: в документе IBM не указано, как сделать объявление такого типа в функции.

3. Процедуры SQL должны быть определены, а затем скомпилированы, прежде чем вы сможете их использовать. Здесь неясно, что вы делаете, на каком шаге вы находитесь. Если вы пытаетесь определить ее (запустить как SQL), имейте в виду, что тело процедуры содержит точки с запятой, поэтому вам нужно изменить разделитель SQL на что-то другое перед ее запуском. Я сам использую ‘#’. Это должно быть в последней строке вашего кода.

Ответ №1:

Я не говорю и не читаю по-французски, но, похоже, ошибка сообщает вам, что определение вашей функции ожидает возвращаемое значение, но тело функции ничего не возвращает.

Теперь при создании скалярной функции SQL тело функции начинается с объявлений. Эти объявления предназначены для переменных и курсоров. К некоторому сожалению, вы создаете глобальную временную таблицу, используя инструкцию, начинающуюся с DECLARE . Это относится не к объявлениям, а к телу процедуры.

                       .-NOT ATOMIC-.   
>>- -------- --BEGIN-- ------------ ---------------------------->
   '-label:-'         '-ATOMIC-----'   

>-- --------------------------------------- -------------------->
   | .-----------------------------------. |   
   | V                                   | |   
   '--- -SQL-variable-declaration-- -- ;  -'   
        -SQL-condition-declaration-            
        -return-codes-declaration--            
       '-INCLUDE-statement---------'           

>-- -------------------------------------- --------------------->
   | .----------------------------------. |   
   | V                                  | |   
   '--- -DECLARE CURSOR-statement- -- ;  -'   
       '-INCLUDE-statement--------'           

>-- --------------------------------- -------------------------->
   | .-----------------------------. |   
   | V                             | |   
   '--- -handler-declaration- -- ;  -'   
       '-INCLUDE-statement---'           

   .---------------------------------.                   
   V                                 |                   
>---- ----------------------------- - --END-- ------- ---------><
     '-SQL-procedure-statement-- ; '         '-label-'
  

Это часть инструкции процедуры SQL!

Комментарии:

1. Да, вы правы. Я исправил это, но снова возникает та же проблема: я не могу объявить глобальную временную таблицу в функции SQL…

2. Функция создается, когда я отключаю строки объявления моей временной таблицы: в документе IBM не указано, как сделать объявление такого типа в функции.

3. Все в порядке: я нашел. Объявление таблицы должно находиться за объявлением переменных.

4. Это то, что я как раз собирался вам рассказать. Просто собираюсь обновить этот ответ для будущих читателей.

Ответ №2:

Раздел объявления должен предшествовать созданию любых таблиц.

Хотя это кажется нелогичным, объявление ГЛОБАЛЬНОЙ ВРЕМЕННОЙ ТАБЛИЦЫ не является обычным объявлением переменной.

Попробуйте переместить объявления других переменных над объявлением таблицы.