【问题标题】:Reffering to created volatile table causes NOT exists error in procedure参考创建易失性表导致过程中不存在错误
【发布时间】:2019-01-20 01:23:27
【问题描述】:

这对我来说真的很奇怪,因为我什至无法重新创建以前创建的过程:

下一个代码有效:

 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;

结束;

但是当我在循环中引用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。我找到了可能的解决方案,手动创建易失性表,然后将创建仅带有警告的过程。这是怎么回事

【问题讨论】:

标签: sql teradata exists


【解决方案1】:

@RobPaller 来自here 的回答。我们是否考虑过全局临时表?

表定义存储在 DBC 数据字典中,并在被 SQL 引用时在会话期间实例化。与 volatile 表一样,全局临时表是特定于会话的。与 volatile 表不同,全局临时表依赖于用户的临时空间而不是 spool 空间。

或者只是手动创建易失性表,然后将创建仅带有警告的过程

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多