Dlaczego w pierwszej kolejności chcesz utworzyć tymczasową tabelę w procedurze składowanej?
Stosunkowo często tworzy się tabele tymczasowe w innych bazach danych (na przykład SQL Server i MySQL). Bardzo, bardzo rzadko robi się to samo w Oracle. W prawie każdym przypadku, gdy kusi Cię utworzenie tymczasowej tabeli w Oracle, istnieje lepsze podejście architektoniczne. Istnieje wątek na stosie DBA, który omawia alternatywy dla tabel tymczasowych i dlaczego nie są powszechnie potrzebne w Oracle.
Programowo możesz tworzyć obiekty za pomocą dynamicznego SQL
CREATE OR REPLACE PROCEDURE dont_do_this
AS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE a( id INTEGER )';
END;
Jeśli jednak utworzysz tabelę tymczasową dynamicznie, każde odwołanie do tej tabeli również będzie musiało być wykonane przez dynamiczny SQL — nie będziesz w stanie napisać prostego SELECT
oświadczenia przeciwko tabeli. A definicja tabeli tymczasowej w Oracle jest globalna, więc jest widoczna dla każdej sesji. Jeśli masz dwie różne sesje, które próbują utworzyć tę samą tabelę, w drugiej sesji wystąpi błąd. Jeśli spodziewasz się, że stół będzie miał inną definicję w różnych sesjach, masz jeszcze więcej problemów.