Почему выполнение этого запроса с EXECUTE IMMEDIATE приводит к сбою? - PullRequest
8 голосов
/ 20 мая 2009

Я пишу процедуру 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. Если я запускаю созданный запрос вручную, он выполняется правильно. На данный момент я могу определить причину проблемы.

1 Ответ

29 голосов
/ 20 мая 2009

Попробуйте потерять ";" из строки, которую вы выполняете немедленно.

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
...