2014-10-06 1 views
0

이해가 정확하다면 임시 테이블이 세션이 끝날 때 자동으로 삭제되어야합니다. 하지만 내 저장 프로 시저가 끝나면 임시 테이블이 여전히 있습니다. tmp 테이블을 사용하는 방법을 아는 사람이 있습니까? 미리 감사드립니다.임시 테이블이 세션이 끝날 때 삭제되지 않습니다.

답변

0

temp table은 세션 기간 동안 존재합니다. 따라서 stored proc에 임시 테이블을 만들고 여전히 동일한 세션에있는 경우 temp table은 여전히있을 것입니다. 저장 프로 시저에서 테이블을 삭제하는 것이 좋습니다. 다른 RDBMSSQL Server과 같이 테이블이 원하는 것처럼 들리는 변수로 존재할 수 있습니다.

0

일반적으로 독립 실행 형 프로 시저가 종료되면 Temp 테이블이 정리됩니다.

그러나 루프 내에서 프로 시저를 호출 할 때 반복을 통해 single session으로 동작합니다.

따라서 동일한 temp 테이블을 삭제하지 않고 반복해서 작성하는 것과 같습니다.

프로 시저 내에서 임시 테이블을 사용할 때마다 "드롭 테이블"을 사용하는 것이 좋습니다. 재방송은 영향을받지 않습니다.

예 :

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'); 

절차 : process_date 쿼리에서 history_date과 SELECT load_dt 하나 이상의 날짜를 반환하면이 코드는 문제를 만들 것입니다

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; 

.

위의 설명이 맞는지 확실하지 않습니다. 시도 :-)