Perché in primo luogo vuoi creare una tabella temporanea in una procedura memorizzata?
È relativamente comune creare tabelle temporanee in altri database (SQL Server e MySQL, ad esempio). È molto, molto raro fare la stessa cosa in Oracle. In quasi tutti i casi in cui sei tentato di creare una tabella temporanea in Oracle, esiste un approccio architetturale migliore. C'è un thread sullo stack DBA che discute di alternative alle tabelle temporanee e perché non sono comunemente necessari in Oracle.
A livello di codice, puoi creare oggetti utilizzando SQL dinamico
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Se crei una tabella temporanea in modo dinamico, tuttavia, ogni riferimento a quella tabella dovrà anche essere tramite SQL dinamico:non sarai in grado di scrivere semplice SELECT
dichiarazioni contro il tavolo. E la definizione di una tabella temporanea in Oracle è globale, quindi è visibile a ogni sessione. Se hai due sessioni diverse che tentano di creare la stessa tabella, la seconda sessione riceverà un errore. Se ti aspetti che la tabella abbia una definizione diversa in sessioni diverse, hai ancora più problemi.