我需要从我在ANSI会话模式下连接的Teradata中提取数据。 Teradata版本低于14,因此使用' WITH'不支持多个派生表格。条款。由于这个限制,我被迫创建一个临时表,我加载数据,并希望使用临时表中的数据。但是,我得到了
3722错误:只有一个COMMIT WORK或null语句在a之后是合法的 DDL声明
我尝试了 COMMIT , COMMIT WORK , SELECT null ,所有这些都会引发同样的错误。请注意,我不能使用BT; ET;因为我不在TERADATA会议上。并且ANSI会话不支持它。
这是我想要使用的查询的简化版本。
CREATE MULTISET VOLATILE TABLE temp_table AS
(SELECT col FROM my_table)
WITH DATA
ON COMMIT PRESERVE ROWS;
COMMIT; -- COMMIT; / COMMIT;/COMMIT WORK;/;
SELECT * FROM temp_table;
关于如何让这个工作的任何想法?
P.S:是的,我必须在单个请求中拥有CREATE AND SELECT语句。由于我们设置ETL过程的方式,这是我们的限制。
答案 0 :(得分:0)
如果有任何方法可以将会话模式从ANSI更改为TERADATA,那将是最简单的解决方案。
否则,您可以尝试将其拆分为CREATE TABLE ... WITH NO DATA语句,COMMIT WORK和INSERT语句。
PS:您没有提到数据分布,但是如果所选表的分布不佳,我将创建没有主索引的临时表。