这对我来说确实是一个奇怪的错误,因为我什至无法重新创建以前创建的过程:
下一个代码有效:
REPLACE PROCEDURE prd2.SP_temp_not_working()
begin
declare V_REPORT_DATE int;
CREATE MULTISET VOLATILE TABLE VT_C,
NO FALLBACK,
NO LOG
(
REPORT_DATE DATE FORMAT 'YY/MM/DD' NOT NULL
)
UNIQUE PRIMARY INDEX( REPORT_DATE )
ON COMMIT PRESERVE ROWS;
l1:
FOR RD AS RD_CURS CURSOR FOR
SELECT 1 from VT_C
DO
SET V_REPORT_DATE =1 ;
end for l1;
end;
但这不起作用
REPLACE PROCEDURE prd2.SP_temp_working()
begin
declare V_REPORT_DATE int;
CREATE MULTISET VOLATILE TABLE VT_C,
NO FALLBACK,
NO LOG
(
REPORT_DATE DATE FORMAT 'YY/MM/DD' NOT NULL
)
UNIQUE PRIMARY INDEX( REPORT_DATE )
ON COMMIT PRESERVE ROWS;
l1:
FOR RD AS RD_CURS CURSOR FOR
SELECT 1 -- from VT_C
DO
SET V_REPORT_DATE =1 ;
end for l1;
end;
但是当我在循环内引用VT_C
表时,TD会抛出这样的错误:
更换步骤失败。 [5526] SPL1027:E(L15),缺少/无效的SQL语句“ E(3807):对象'VT_C'不存在。”。
这是怎么了?
数据库版本:Teradata 15.10.07.08
提供程序版本:Teradata.Net 16.10.0.0
尝试ANSI和默认会话模式-相同的错误
UPD。我找到了可能的解决方案,手动创建易失性表,然后仅使用警告创建过程。发生了什么事
答案 0 :(得分:0)
@RobPaller答案。我们是否考虑过全局临时表?
表定义存储在DBC数据字典中,并在被SQL引用时在会话持续时间内实例化。像易失性表一样,全局临时表是特定于会话的。与易失性表不同,全局临时表依赖于用户的临时空间而不是假脱机空间。
或者只是手动创建易失表,然后将创建带有警告的过程