创建Teradata volatile表并使用isql从表中选择

创建Teradata volatile表并使用isql从表中选择,teradata,isql,ddl,Teradata,Isql,Ddl,我正在尝试将一个双语句SQL文件作为批处理作业提交给Linux机器上的isql实用程序 第一条语句定义了一个VOLATILE表,第二条语句是针对该表的SELECT语句 Teradata服务器托管在远程计算机上,我已成功运行SELECT语句将结果集返回到主机 下面是SQL文件的一个示例 CREATE MULTISET VOLATILE TABLE my_temp_table AS ( SELECT A.ID , MIN(A.DTE) AS FIRST_DATE FROM

我正在尝试将一个双语句SQL文件作为批处理作业提交给Linux机器上的isql实用程序

第一条语句定义了一个
VOLATILE表
,第二条语句是针对该表的
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驱动程序][Teradata数据库]数据定义无效,除非单独使用。

我能够在Teradata客户机应用程序(Studio和SQL Assistant)中运行这些语句,没有任何问题

更新:我已经包含了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

去掉最后一个;从您的SQL文件。我试过了,它对我很有用。

似乎这两条语句都是作为一个多语句请求提交的,如果包含DDL,这是不可能的。可能ODBC驱动程序删除了空白,您可以在ODBC.ini文件i second dnoeth中尝试使用
NoScan=Yes
选项。您可以尝试的另一个选项是使用
GTT
而不是
Volatile
表。@dnoeth:我在odbc.ini文件(见上文)中添加了
NoScan=Yes
选项,但收到了相同的错误。@visakh:很遗憾,我没有对数据库的CREATE table访问权限。