我的Teradata查询创建一个volatile,用于联接到现有视图。将查询链接到excel时,会弹出以下错误:“ Teradata:[Teradata数据库] [3932]在DDL语句之后,只有ET或null语句是合法的”。对于在teradata中没有写权限来创建真实视图或表的人,是否有针对性的解决方法?我想避免在SQL中链接到Teradata并运行一个开放式查询以提取所需的数据。
这是用于Excel 2016 64位并使用Teradata版本15.10.1.12
答案 0 :(得分:0)
通常,如果您使用ANSI模式或以BTET模式发行了BT(开始交易),则会发生此错误。
以下是一些解决方法:
ET;
语句(落实)。如果您使用的是ANSI模式,请使用COMMIT;
而不是ET;
。如果不确定,请依次尝试每个。只有一个有效,但是两者都做相同的事情。确保您的挥发表包含ON COMMIT PRESERVE ROWS
如果您没有创建全局临时表的权限,请询问您的DBA。
这是一个简单的例子来说明第4点。
当前:
create volatile table tmp (id Integer)
ON COMMIT PRESERVE ROWS;
insert into tmp
select customer_number
from customer
where X = Y and yr = 2019
;
select a,b,c
from another_tbl A join TMP T ON
A.id = T.id
;
成为:
select a,b,c
from another_tbl A join (
select customer_number
from customer
where X = Y and yr = 2019
) AS T
ON
A.id = T.id
;
或者更好的是,直接将表连接起来。
注意:第一个序列(创建表,插入并选择)是一个三个语句系列。这将返回3个“结果集”。前两个将是行计数,最后一个将是实际数据。大多数程序(包括我认为Excel)不能处理多个结果集响应。这就是很难将Teradata宏与Excel等客户端工具一起使用的原因之一。
后一种解决方案(单选)避免了这个潜在问题。