¿Por qué desea crear una tabla temporal en un procedimiento almacenado en primer lugar?
Es relativamente común crear tablas temporales en otras bases de datos (SQL Server y MySQL, por ejemplo). Es muy, muy raro hacer lo mismo en Oracle. En casi todos los casos en los que tenga la tentación de crear una tabla temporal en Oracle, existe un mejor enfoque arquitectónico. Hay un hilo en la pila de DBA que analiza alternativas a tablas temporales y por qué no son comúnmente necesarios en Oracle.
Mediante programación, puede crear objetos usando SQL dinámico
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Sin embargo, si crea una tabla temporal dinámicamente, cada referencia a esa tabla también deberá ser a través de SQL dinámico; no podrá escribir SELECT
simple declaraciones contra la mesa. Y la definición de una tabla temporal en Oracle es global, por lo que es visible para todas las sesiones. Si tiene dos sesiones diferentes que intentan crear la misma tabla, la segunda sesión obtendrá un error. Si espera que la tabla tenga una definición diferente en diferentes sesiones, tiene aún más problemas.