代码之家  ›  专栏  ›  技术社区  ›  Rocketq

对创建的易失性表进行修改不会导致程序中存在错误

  •  1
  • Rocketq  · 技术社区  · 6 年前

    下一个代码工作:

     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内的表引发这样的错误:

    这里怎么了?

    数据库版本:Teradata 15.10.07.08

    尝试了ANSI和默认会话模式-相同错误

    升级版。我找到了可能的解决方案,手动创建易失性表,然后创建过程时只会出现警告。发生了什么事

    1 回复  |  直到 6 年前
        1
  •  0
  •   Rocketq    6 年前

    @Robballer回答 here

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

    或者只是手动创建易失性表,那么创建过程时只会出现警告