Varför vill du skapa en tillfällig tabell i en lagrad procedur?
Det är relativt vanligt att skapa tillfälliga tabeller i andra databaser (exempelvis SQL Server och MySQL). Det är väldigt, väldigt sällsynt att göra samma sak i Oracle. I nästan varje fall där du är frestad att skapa ett tillfälligt bord i Oracle, finns det ett bättre arkitektoniskt tillvägagångssätt. Det finns en tråd på DBA-stacken som diskuterar alternativ till tillfälliga tabeller och varför de inte är vanliga i Oracle.
Programmatiskt kan du skapa objekt med dynamisk SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Om du skapar en temporär tabell dynamiskt måste dock varje referens till den tabellen också vara via dynamisk SQL-- du kommer inte att kunna skriva enkel SELECT
uttalanden mot bordet. Och definitionen av en tillfällig tabell i Oracle är global så den är synlig för varje session. Om du har två olika sessioner som båda försöker skapa samma tabell, kommer den andra sessionen att få ett felmeddelande. Om du förväntar dig att tabellen ska ha en annan definition i olika sessioner, har du ännu fler problem.