Waarom wil je in de eerste plaats een tijdelijke tabel in een opgeslagen procedure maken?
Het is relatief gebruikelijk om tijdelijke tabellen te maken in andere databases (bijvoorbeeld SQL Server en MySQL). Het is zeer, zeer zeldzaam om hetzelfde te doen in Oracle. In bijna alle gevallen waarin u in de verleiding komt om een tijdelijke tabel in Oracle te maken, is er een betere architecturale aanpak. Er is een thread over de DBA-stack die alternatieven voor tijdelijke tabellen en waarom ze niet vaak nodig zijn in Oracle.
Programmatisch kunt u objecten maken met dynamische SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Als u echter dynamisch een tijdelijke tabel maakt, moet elke verwijzing naar die tabel ook via dynamische SQL zijn - u kunt geen eenvoudige SELECT
schrijven uitspraken tegen de tafel. En de definitie van een tijdelijke tabel in Oracle is globaal, zodat deze voor elke sessie zichtbaar is. Als u twee verschillende sessies hebt die beide dezelfde tafel proberen te maken, krijgt de tweede sessie een foutmelding. Als je verwacht dat de tabel in verschillende sessies een andere definitie heeft, heb je nog meer problemen.