临时表在会话结束时不会丢失

时间:2014-10-06 15:31:29

标签: netezza

如果我的理解是正确的,临时表应该在会话结束时自动删除。但是在我的存储过程结束后,临时表仍然存在。有人知道如何使用tmp表吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

会话期间存在temp table。因此,如果您在stored proc中创建临时表并且仍处于同一会话中temp table仍然存在。我建议在存储过程中删除表。其他RDBMSSQL Server允许表格作为变量存在,听起来就像你想要的那样。

答案 1 :(得分:0)

通常,当独立程序结束时,Temp表会被清除。

但是,如果我们在一个循环中调用该过程,那么它在整个迭代过程中表现为single session

因此,它与在不丢弃它的情况下一次又一次地创建相同的临时表相同。

每当我们在过程中使用Temp表时,最好使用“drop table”。重新运行不会受到影响。

示例:

FOR v_cnt IN SELECT load_dt AS history_date FROM process_dates ORDER BY history_date ASC                    
    LOOP
       CALL sp_Logic(v_Record.history_date, 'ALL');
    END LOOP;


sp_Logic(v_Record.history_date, 'ALL');

步骤:

CREATE OR REPLACE PROCEDURE sp_Logic"(DATE, CHARACTER VARYING(ANY))
RETURNS CHARACTER VARYING(ANY) EXECUTE AS CALLER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE 
...
..
..
v_Curr_Step := 'Populate ref_id';
CREATE TEMP TABLE TEMP_REFID_1 AS 
        (SELECT * FROM ref_id) ;
..
..
EXCEPTION 
    WHEN OTHERS 
    THEN 
        RAISE EXCEPTION 'CAUGHT EXCEPTION WHILE % : %', v_Curr_Step, SQLERRM;
END; 
END_PROC;

一旦SELECT load_dt AS history_date FROM process_date查询返回多个日期,此代码将产生问题。

我不确定上述解释是否有意义。我试过了: - )