W Oracle bardzo rzadko potrzebujesz tymczasowej tabeli. Często potrzebujesz tymczasowych tabel w innych bazach danych, ponieważ te bazy danych nie implementują spójności odczytu wielu wersji i istnieje możliwość, że ktoś czytający dane z tabeli zostanie zablokowany podczas działania procedury lub że procedura wykonałaby niepoprawny odczyt, gdyby tak się stało nie zapisywać danych w osobnej strukturze. Nie potrzebujesz globalnych tabel tymczasowych w Oracle z żadnego z tych powodów, ponieważ czytniki nie blokują pisarzy, a nieprawidłowe odczyty nie są możliwe.
Jeśli potrzebujesz tylko tymczasowego miejsca do przechowywania danych podczas wykonywania obliczeń PL/SQL, kolekcje PL/SQL są częściej używane niż tymczasowe tabele w Oracle. W ten sposób nie przesyłasz danych tam iz powrotem z silnika PL/SQL do silnika SQL iz powrotem do silnika PL/SQL.
CREATE PROCEDURE do_some_processing
AS
TYPE emp_collection_typ IS TABLE OF emp%rowtype;
l_emps emp_collection_type;
CURSOR emp_cur
IS SELECT *
FROM emp;
BEGIN
OPEN emp_cur;
LOOP
FETCH emp_cur
BULK COLLECT INTO l_emps
LIMIT 100;
EXIT WHEN l_emps.count = 0;
FOR i IN 1 .. l_emps.count
LOOP
<<do some complicated processing>>
END LOOP;
END LOOP;
END;
Możesz utworzyć globalną tabelę tymczasową (poza procedurą) i używać globalnej tabeli tymczasowej wewnątrz procedury tak samo, jak w przypadku każdej innej tabeli. Możesz więc nadal korzystać z tabel tymczasowych, jeśli sobie tego życzysz. Ale mogę policzyć na jednej ręce, ile razy naprawdę potrzebowałem tymczasowej tabeli w Oracle.