Proč chcete vůbec vytvořit dočasnou tabulku v uložené proceduře?
Je poměrně běžné vytvářet dočasné tabulky v jiných databázích (například SQL Server a MySQL). V Oracle je velmi, velmi vzácné dělat totéž. Téměř v každém případě, kdy jste v pokušení vytvořit dočasnou tabulku v Oracle, existuje lepší architektonický přístup. Na zásobníku DBA je vlákno, které pojednává o alternativy k dočasným tabulkám a proč nejsou běžně potřeba v Oracle.
Programově můžete vytvářet objekty pomocí dynamického SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Pokud však dočasnou tabulku vytvoříte dynamicky, každý odkaz na tuto tabulku bude také muset být prostřednictvím dynamického SQL – nebudete moci napsat jednoduchý SELECT
prohlášení proti tabulce. A definice dočasné tabulky v Oracle je globální, takže je viditelná pro každou relaci. Pokud máte dvě různé relace, které se obě pokoušejí vytvořit stejnou tabulku, druhá relace dostane chybu. Pokud očekáváte, že tabulka bude mít různé definice v různých relacích, máte ještě více problémů.