Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Непонятности с табличными выражениями / 8 сообщений из 8, страница 1 из 1
15.10.2008, 14:26
    #35595840
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Начинаю работать с DB2. Решил портировать один из проектов. Это виртуальная файловая система.
Отрабатываю проход по дереву. Например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE FILE_(
   IN V_FILE_ID bigint 
   )
BEGIN
    DECLARE GLOBAL TEMPORARY TABLE tmp(file_id bigint);     

    WITH cte(file_id)
    AS (
       SELECT file_id
       FROM files
       WHERE file_id = V_FILE_ID
       UNION ALL
       SELECT f.file_id
       FROM cte, files f
       WHERE cte.file_id = f.parent_file_id 
    )
    SELECT *
    INTO tmp
    FROM cte;
     
END@

Лезет ошибка:
[IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "(" после текста "cte(file_id) Список возможных правильных элементов: ",". LINE NUMBER=7. SQLSTATE=42601

Что не так?
...
Рейтинг: 0 / 0
15.10.2008, 14:53
    #35595924
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE FILE_(
   IN V_FILE_ID bigint 
   )
BEGIN
    DECLARE GLOBAL TEMPORARY TABLE tmp(file_id bigint);     

    insert into session.tmp(file_id)
    WITH cte(file_id)
    AS (
       SELECT file_id
       FROM files
       WHERE file_id = V_FILE_ID
       UNION ALL
       SELECT f.file_id
       FROM cte, files f
       WHERE cte.file_id = f.parent_file_id 
    )
    SELECT file_id
    FROM cte;
     
END@
Statement termination character должен быть установлен в '@' (без кавычек)

Кроме того, если вы хотите, чтобы:
- процедура в одной и той же сессии работала более 1-го раза, то в конце декларации tmp добавтьте ' with replace'
- после commit записи из таблицы не удалялись, то в конце декларации tmp добавтьте ' on commit preserve rows'

предложения добавляются без кавычек.
...
Рейтинг: 0 / 0
15.10.2008, 17:00
    #35596392
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Mark Barinstein
Statement termination character должен быть установлен в '@' (без кавычек)

Кроме того, если вы хотите, чтобы:
- процедура в одной и той же сессии работала более 1-го раза, то в конце декларации tmp добавтьте ' with replace'
- после commit записи из таблицы не удалялись, то в конце декларации tmp добавтьте ' on commit preserve rows'

предложения добавляются без кавычек.

Про опции временной таблицы спасибо, я почитал доку на эту тему, а вот про termination character не понятно
Попробовал заменить финальную @ на ;
Но отвалилось с той же ошибкой
...
Рейтинг: 0 / 0
15.10.2008, 17:02
    #35596401
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
mwolfа вот про termination character не понятно
Попробовал заменить финальную @ на ;
Но отвалилось с той же ошибкойИз какой программы вы запускаете команду создания процедуры?
...
Рейтинг: 0 / 0
15.10.2008, 17:17
    #35596460
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Mark BarinsteinИз какой программы вы запускаете команду создания процедуры?

Пробовал в DB2 Maestro
Потом стандратный Редактор команд
...
Рейтинг: 0 / 0
15.10.2008, 17:19
    #35596470
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Причём вот такую вот процедуру создало
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE PROCEDURE FILE_ADD
  (IN V_NAME VARCHAR( 255 ),
    IN V_DESC VARCHAR( 1024 ),
    IN V_PARENT_FILE_ID INTEGER,
    IN V_FILE_TYPE_ID INTEGER,
    IN V_CREATOR_ID INTEGER,
    IN V_IS_NEEDS_VERSION INTEGER,
    IN V_IS_NEEDS_LOG INTEGER,
    IN V_DATA BLOB( 1048576 ))
begin
 SET v_FILE_TYPE_ID = COALESCE(v_FILE_TYPE_ID,  0 );

 INSERT INTO Files
 (NAME, "DESC", PARENT_FILE_ID, FILE_TYPE_ID, IS_DELETED, CREATOR_ID, IS_NEEDS_VERSION, IS_NEEDS_LOG)
 VALUES(v_Name, v_DESC, v_PARENT_FILE_ID, v_FILE_TYPE_ID, default,v_CREATOR_ID, v_IS_NEEDS_VERSION, v_IS_NEEDS_LOG);

 IF v_FILE_TYPE_ID =  0  THEN
  INSERT INTO FILE_DATA(FILE_ID, "VERSION", "DATA")
  VALUES(IDENTITY_VAL_LOCAL(),  1 , v_data);
 END IF;

end@
...
Рейтинг: 0 / 0
15.10.2008, 17:28
    #35596498
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Т.е. в стандартном Редакторе команд с установленным внизу в поле Statement termination character символом @ процедура, которую я написал, не компилируется?
...
Рейтинг: 0 / 0
17.10.2008, 13:09
    #35600698
mwolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятности с табличными выражениями
Mark BarinsteinТ.е. в стандартном Редакторе команд с установленным внизу в поле Statement termination character символом @ процедура, которую я написал, не компилируется?

Всё зажило
Действительно, проблемы были с termination character в DB Maestro
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Непонятности с табличными выражениями / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]