V Oracle velmi zřídka potřebujete dočasnou tabulku na prvním místě. Dočasné tabulky běžně potřebujete v jiných databázích, protože tyto databáze neimplementují konzistenci čtení s více verzemi a existuje možnost, že někdo, kdo bude číst data z tabulky, bude zablokován během běhu vaší procedury nebo že by vaše procedura provedla nečisté čtení, pokud by se tak stalo. Neukládejte data do samostatné struktury. V Oracle nepotřebujete globální dočasné tabulky ani z jednoho z těchto důvodů, protože čtečky neblokují zapisovače a špinavé čtení není možné.
Pokud potřebujete pouze dočasné místo pro ukládání dat při provádění výpočtů PL/SQL, kolekce PL/SQL se v Oracle běžněji používají než dočasné tabulky. Tímto způsobem nepřesouváte data tam a zpět z PL/SQL enginu do SQL enginu a zpět do PL/SQL enginu.
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;
Můžete vytvořit globální dočasnou tabulku (mimo proceduru) a použít globální dočasnou tabulku uvnitř procedury stejně, jako byste použili jakoukoli jinou tabulku. Takže můžete pokračovat v používání dočasných tabulek, pokud si to přejete. Ale mohu spočítat na jedné ruce, kolikrát jsem skutečně potřeboval dočasnou tabulku v Oracle.