Pergunta

Estou escrevendo um procedimento PL / SQL que precisa para gerar dinamicamente algumas consultas, uma das quais envolve a criação de uma tabela temporária usando resultados de uma consulta tomado como um parâmetro.

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;

Ele compila corretamente, mas mesmo com consultas muito simples, como com:

BEGIN
    sqlout('SELECT * FROM DUAL');
END;

Ela lança ORA-00911: invalid character. Se eu executar a consulta criada manualmente é executado correctamente. Neste ponto eu sou capaz de determinar o que está causando o problema.

Foi útil?

Solução

Tente perder o ";" de dentro da cadeia que Execute Immediate.

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top