powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
4 сообщений из 4, страница 1 из 1
Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
    #39654447
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Teradata ошибка при запуске procedure в которой insert () with select

Столкнулся с такой проблемой, при попытке перенести большой запрос вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert into ([fields]) 
  with w0 as ( ) 
    select [fields] 
       from ...
         left join wo on (...)
    unioan all
    select [fields]
       from ...
         left join w0 on (...);


оборачиваем в процедуру, компилируем(без ошибок):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
replace test_insert_with ()
begin
insert into ([fields]) 
  with w0 as ( ) 
    select [fields] 
       from ...
         left join wo on (...)
    unioan all
    select [fields]
       from ...
         left join w0 on (...);
end;


запускаем процедуру
Код: sql
1.
call nv_test_insert_with ();


получаем ошибку:
Код: plaintext
1.
Call filed. [3707]TEST_INSERT_WITH:Syntax error, expected something like a name or a Unicode delimited identifier or  between an "UDFCALLNAME" keywoed or "SELECT" keyword or "(" between "(" and the "WITH" keyword.

Отказаться от with неудобно по причине того что в реальности в запросе их несколько (+ union all).

p.s. пока оформлял нашёл ответ, что не работает :(

WITH and WITH RECURSIVE Statement Modifiers

Код: plaintext
1.
2.
3.
4.
• You cannot specify a WITH or WITH RECURSIVE statement modifier in the definitions of any of these database objects:
  • Views and recursive views
  • Triggers
  • Stored procedures
  • Derived tables
...
Рейтинг: 0 / 0
Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
    #39654563
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну оформите CTE во временную таблицу. Почти тоже самое получится по производительности, только синтаксически инче выглядеть будет.
...
Рейтинг: 0 / 0
Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
    #39655050
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApexНу оформите CTE во временную таблицу. Почти тоже самое получится по производительности, только синтаксически инче выглядеть будет.

Как сделать выход всегда можно найти, но читаемость сильно меняется.

Как я понял вы про "VOLATILE TABLE", но тут две проблемы:
1. Промежуточный набор в CTE может быть весьма большим (поэтому в несильно изменившейся производительности не уверен, это же выйдет доп. пересылка данных между нодами, если я правильно понимаю как это всё отработает на железе).
2. Удобочитаемость немного снижается, вырастает объём текста(не критично но это уже не один запрос).

В общем это не препятствие которое нельзя преодолеть, просто для того что-бы понять почему не работает в процедуре то что работает в запросе ушло прилично времени, т.к. что Google что Yandex в запросах выдаёт совсем другие варианты.
...
Рейтинг: 0 / 0
Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
    #39667946
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81Как сделать выход всегда можно найти, но читаемость сильно меняется.

Как я понял вы про "VOLATILE TABLE", но тут две проблемы:
1. Промежуточный набор в CTE может быть весьма большим (поэтому в несильно изменившейся производительности не уверен, это же выйдет доп. пересылка данных между нодами, если я правильно понимаю как это всё отработает на железе).

Вовсе необязательно. Синтаксис создания такой таблицы поддерживает PRIMARY INDEX, его можно подобрать таким образом, чтобы избежать пересылки, которую вы боитесь. Ну и проверить же можно, дело то двух минут.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Teradata ошибка при запуске procedure в которой insert () with select (Фича <=15 терадаты)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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