Hvorfor vil du i første omgang oprette en midlertidig tabel i en lagret procedure?
Det er relativt almindeligt at oprette midlertidige tabeller i andre databaser (f.eks. SQL Server og MySQL). Det er meget, meget sjældent at gøre det samme i Oracle. I næsten alle tilfælde, hvor du bliver fristet til at oprette et midlertidigt bord i Oracle, er der en bedre arkitektonisk tilgang. Der er en tråd på DBA-stakken, der diskuterer alternativer til midlertidige tabeller og hvorfor de ikke er almindeligt nødvendige i Oracle.
Programmatisk kan du oprette objekter ved hjælp af dynamisk SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Hvis du opretter en midlertidig tabel dynamisk, skal hver reference til den tabel også være via dynamisk SQL-- du vil ikke være i stand til at skrive simpel SELECT
udsagn mod bordet. Og definitionen af en midlertidig tabel i Oracle er global, så den er synlig for hver session. Hvis du har to forskellige sessioner, der begge forsøger at oprette den samme tabel, vil den anden session få en fejl. Hvis du forventer, at tabellen har en anden definition i forskellige sessioner, har du endnu flere problemer.