Почему выполнение этого запроса с помощью EXECUTE IMMEDIATE приводит к сбою?
-
23-08-2019 - |
Вопрос
Я пишу процедуру PL / SQL, которая должна динамически генерировать некоторые запросы, один из которых включает в себя создание временной таблицы с использованием результатов запроса, принятых в качестве параметра.
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;
ЭТО бросает ORA-00911: invalid character
.Если я запускаю созданный запрос вручную, он выполняется корректно.На данный момент я могу определить, что является причиной проблемы.
Решение
Попробуйте потерять ";" внутри строки, которую вы немедленно выполняете.
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Не связан с StackOverflow