I Oracle har du meget sjældent brug for et midlertidigt bord i første omgang. Du har normalt brug for midlertidige tabeller i andre databaser, fordi disse databaser ikke implementerer multi-version læsekonsistens, og der er mulighed for, at nogen, der læser data fra tabellen, vil blive blokeret, mens din procedure kører, eller at din procedure ville lave en beskidt læsning, hvis den gjorde det. ikke gemme dataene til en separat struktur. Du behøver ikke globale midlertidige tabeller i Oracle af nogen af disse grunde, fordi læsere ikke blokerer forfattere, og beskidte læsninger er ikke mulige.
Hvis du bare har brug for et midlertidigt sted at gemme data, mens du udfører PL/SQL-beregninger, er PL/SQL-samlinger mere almindeligt brugt end midlertidige tabeller i Oracle. På denne måde skubber du ikke data frem og tilbage fra PL/SQL-motoren til SQL-motoren og tilbage til PL/SQL-motoren.
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;
Du kan oprette en global midlertidig tabel (uden for proceduren) og bruge den globale midlertidige tabel inde i din procedure, ligesom du ville bruge enhver anden tabel. Så du kan fortsætte med at bruge midlertidige borde, hvis du ønsker det. Men jeg kan tælle på én hånd det antal gange, jeg virkelig havde brug for et midlertidigt bord i Oracle.