Защо изобщо искате да създадете временна таблица в съхранена процедура?
Сравнително често се създават временни таблици в други бази данни (SQL Server и MySQL, например). Много, много рядко се прави същото в Oracle. В почти всеки случай, когато се изкушавате да създадете временна таблица в Oracle, има по-добър архитектурен подход. Има нишка в стека на DBA, която обсъжда алтернативи на временните таблици и защо те не са често необходими в Oracle.
Програмно можете да създавате обекти с помощта на динамичен SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Ако обаче създадете временна таблица динамично, всяка препратка към тази таблица също ще трябва да бъде чрез динамичен SQL-- няма да можете да напишете прост SELECT
твърдения срещу масата. А дефиницията на временна таблица в Oracle е глобална, така че е видима за всяка сесия. Ако имате две различни сесии, които се опитват да създадат една и съща таблица, втората сесия ще получи грешка. Ако очаквате таблицата да има различна дефиниция в различните сесии, ще имате още повече проблеми.