Создайте таблицу Teradata volatile и выберите из таблицы, используя isql

Я пытаюсь представить SQL файл с двумя утверждениями в виде пакетного задания на утилиту isql на машине Linux.

Первый оператор определяет VOLATILE TABLE а второй оператор - SELECT этой таблицы.

Сервер Teradata размещен на удаленном компьютере, и я успешно запускаю SELECT для возврата наборов результатов на мой узел.

Ниже приведен пример файла SQL.

CREATE MULTISET VOLATILE TABLE my_temp_table AS (
 SELECT 
 A.ID
 , MIN(A.DTE) AS FIRST_DATE
 FROM (
 SELECT
 X.ID
 , MIN(X.STRT_DTE) AS DTE
 FROM DATABASE0.TABLE_ABC AS X
 WHERE X.STRT_DTE BETWEEN (CURRENT_DATE - 7) AND CURRENT_DATE
 GROUP BY X.ID
 UNION ALL
 SELECT
 Y.ID
 , MIN(Y.STRT_DTE) AS DTE
 FROM DATABASE0.TABLE_XYZ AS Y
 WHERE Y.STRT_DTE BETWEEN (CURRENT_DATE - 7) AND CURRENT_DATE
 GROUP BY Y.ID
 ) AS A
GROUP BY A.ID
)
WITH DATA
ON COMMIT PRESERVE ROWS
;
SELECT TOP 10 * FROM my_temp_table;

Когда я запускаю следующую команду

cat my_two_statement_query.sql | isql -v -b -d',' mydsn myuid mypwd

Я получаю следующую ошибку

[25000][Teradata][ODBC Teradata Driver][Teradata Database] Data definition not valid unless solitary.

Я могу запускать эти заявления в клиентских приложениях Teradata - Studio и SQL Assistant - без проблем.

UPDATE: я включил содержимое файла odbc.ini

[ODBC]
InstallDir=/path/to/installation/dir
Trace=0
TraceDll=/path/to/dll/odbctrac.so
TraceFile=/path/to/tracefile/odbc_trace.log
TraceAutoStop=0

[ODBC Data Sources]
proddsn=tdata.so

[proddsn]
Driver=/path/to/driver/tdata/so
Description=Teradata database
DBCName=TDPROD
LastUser=
Username=
Password=
Database=DATABASE0
DefaultDatabase=DATABASE0
NoScan=Yes
1 ответ

Просто удалите последний; из вашего файла SQL. Я попробовал, это работает для меня.

licensed under cc by-sa 3.0 with attribution.