引用 create volatile table 导致过程中不存在错误
Reffering to created volatile table causes NOT exists error in procedure
这对我来说真是个奇怪的错误,因为我什至无法重新创建以前创建的过程:
下一个代码有效:
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;
结束;
但是当我在循环TD中引用VT_C
table时抛出这样的错误:
REPLACE PROCEDURE Failed. [5526] SPL1027:E(L15), Missing/Invalid SQL statement'E(3807):Object 'VT_C' does not exist.'.
这里有什么问题?
数据库版本:Teradata 15.10.07.08
提供商版本:Teradata.Net 16.10.0.0
已尝试 ANSI 和默认会话模式 - 同样的错误
更新。我找到了可能的解决方案,手动创建 volatile tables,然后将创建仅带有警告的过程。怎么回事
@RobPaller 来自 here 的回答。我们考虑过全局临时 table 吗?
table 定义存储在 DBC 数据字典中,并在 SQL 引用时在会话期间实例化。与 volatile table 一样,全局临时 table 是特定于会话的。与 volatile table 不同,全局临时 table 依赖于用户的临时 space 而不是假脱机 space.
或者只是手动创建 volatile tables,然后创建的过程将只带有警告
这对我来说真是个奇怪的错误,因为我什至无法重新创建以前创建的过程:
下一个代码有效:
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;
结束;
但是当我在循环TD中引用VT_C
table时抛出这样的错误:
REPLACE PROCEDURE Failed. [5526] SPL1027:E(L15), Missing/Invalid SQL statement'E(3807):Object 'VT_C' does not exist.'.
这里有什么问题?
数据库版本:Teradata 15.10.07.08
提供商版本:Teradata.Net 16.10.0.0
已尝试 ANSI 和默认会话模式 - 同样的错误
更新。我找到了可能的解决方案,手动创建 volatile tables,然后将创建仅带有警告的过程。怎么回事
@RobPaller 来自 here 的回答。我们考虑过全局临时 table 吗?
table 定义存储在 DBC 数据字典中,并在 SQL 引用时在会话期间实例化。与 volatile table 一样,全局临时 table 是特定于会话的。与 volatile table 不同,全局临时 table 依赖于用户的临时 space 而不是假脱机 space.
或者只是手动创建 volatile tables,然后创建的过程将只带有警告