Я пишу процедуру PL/SQL, которая должна динамически генерировать некоторые запросы, одна из которых предполагает создание временной таблицы с использованием результатов запроса, взятого в качестве параметра.Почему выполнение этого запроса с помощью EXECUTE IMMEDIATE приводит к сбою?
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
Он компилирует правильно, но даже при очень простых запросов, таких как с:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
IT бросает ORA-00911: invalid character
. Если я запустил созданный запрос вручную, он будет работать правильно. На этом этапе я могу определить, что вызывает проблему.
Я надеюсь, что прок не запущен в нормальном ходе событий по вашему приложению ... динамический DDL только действительно подходит для администратора сценариев (например, устанавливающих новую среду). –