Вопрос:

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

sql oracle plsql dynamic-sql ora-00911

15628 просмотра

1 ответ

1512 Репутация автора

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

Автор: GameFreak Источник Размещён: 19.05.2009 10:17

Ответы (1)


29 плюса

7713 Репутация автора

Решение

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

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Автор: Petros Размещён: 19.05.2009 10:20
Вопросы из категории :
32x32