Временная таблица не удаляется в конце сеанса

Если я правильно понимаю, временная таблица должна автоматически удаляться в конце сеанса. Но после того, как моя хранимая процедура заканчивается, временная таблица все еще существует. Кто-нибудь знает, как использовать таблицу tmp? Заранее спасибо.


person YYY    schedule 06.10.2014    source источник


Ответы (2)


temp table существует на время вашего сеанса. Поэтому, если вы создадите временную таблицу в stored proc и все еще находитесь в том же сеансе, temp table все равно будет там. Я бы рекомендовал удалить таблицу в хранимой процедуре. Другие RDBMS, такие как SQL Server, позволяют таблице существовать как переменная, которая звучит как то, что вы хотите.

person Niederee    schedule 06.10.2014

Как правило, таблица Temp очищается после завершения автономной процедуры.

Однако, если мы вызываем процедуру внутри цикла, она ведет себя как 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 вернет более одной даты.

Я не уверен, что приведенное выше объяснение имеет смысл. Я старался :-)

person Rakesh Kumar Mishra    schedule 04.11.2015