如果我的理解是正确的,临时表应该在会话结束时自动删除。但是在我的存储过程结束后,临时表仍然存在。有人知道如何使用tmp表吗?提前谢谢。
答案 0 :(得分:0)
会话期间存在temp table
。因此,如果您在stored proc
中创建临时表并且仍处于同一会话中temp table
仍然存在。我建议在存储过程中删除表。其他RDBMS
类SQL 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查询返回多个日期,此代码将产生问题。
我不确定上述解释是否有意义。我试过了: - )