2014-10-06 183 views
0

如果我的理解正確,臨時表應該在會話結束時自動刪除。但是在我的存儲過程結束後,臨時表仍然存在。有人知道如何使用tmp表嗎?先謝謝你。臨時表在會話結束時不會丟失

回答

0

A temp table在會話期間存在。因此,如果您在stored proc中創建了臨時表,並且您仍在同一個會話中,那麼temp table仍然在那裏。我會建議刪除存儲過程中的表。其他RDBMSSQL Server允許一個表作爲一個變量存在,聽起來像你想要的。

0

通常當獨立程序結束時,臨時表會被清除。

但是,如果我們正在調用循環內的過程,那麼在整個迭代過程中它的行爲如同single session

因此,與不刪除它一次又一次創建相同的臨時表相同。

無論何時我們在過程中使用臨時表,最好有「放置表」的做法。重新運行不會受到影響。

例如:

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查詢返回不止一個日期這段代碼將創建問題。

我不確定上述解釋是否有意義。我試過:-)