Почему выполнение этого запроса с помощью EXECUTE IMMEDIATE приводит к сбою?

StackOverflow https://stackoverflow.com/questions/885304

Вопрос

Я пишу процедуру 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 || ')';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top