Piszę procedurę PL/SQL, która musi dynamicznie generować niektóre zapytania, z których jedna wymaga utworzenia tabeli tymczasowej z wykorzystaniem wyników z zapytania wziętego jako parametr.Dlaczego uruchomienie tej kwerendy za pomocą polecenia WYKONAJ NATYCHMIAST powoduje błąd?
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
To kompiluje poprawnie, ale nawet z bardzo prostych zapytań takimi jak:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
rzuca ORA-00911: invalid character
. Jeśli ręcznie uruchomię utworzone zapytanie, działa poprawnie. W tym momencie jestem w stanie określić, co jest przyczyną problemu.
Mam nadzieję, że proces nie jest uruchamiany w normalnym toku zdarzeń przez aplikację ... dynamiczne DDL jest naprawdę odpowiednie tylko dla skryptów administracyjnych (na przykład do konfigurowania nowego środowiska). –