Почему вы хотите создать временную таблицу в хранимой процедуре в первую очередь?
Общепринято создавать временные таблицы в других базах данных (например, SQL Server и MySQL). Очень очень редко можно сделать то же самое в Oracle. Почти в каждом случае, когда у вас возникает соблазн создать временную таблицу в Oracle, есть лучший архитектурный подход. В стеке DBA есть поток, который обсуждает alternatives to temporary tables и почему они вообще не нужны в Oracle.
Программный, вы можете создавать объекты с использованием динамического SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a(id INTEGER)';
END;
При создании временной таблицы динамически, однако, все ссылки на эту таблицу также должны быть с помощью динамического SQL-- не будешь в состоянии написать простые операторы SELECT
против таблицы. И определение временной таблицы в Oracle является глобальным, поэтому оно видимо для каждого сеанса. Если у вас есть два разных сеанса, которые пытаются создать одну и ту же таблицу, второй сеанс получит ошибку. Если вы ожидаете, что таблица будет иметь другое определение в разных сеансах, у вас будет еще больше проблем.
Возможного дубликат [как к создать-и-потребительный временный стол-в-оракул хранимой процедуры] (HTTP: // StackOverflow. com/questions/9310860/how-to-create-and-use-tempor-table-in-oracle-stored-procedure) – tbone
И зачем вы хотите создать временную таблицу внутри процедуры? –
Я думаю, что то, что вы хотите, это нечто вроде размещения 'CREATE GLOBAL TEMPORARY TABLE A (ID INT) ON COMMIT DELETE ROWS' вне процедуры. Он будет специфичным для сеанса и будет очищен при каждой фиксации. –