Por que executar essa consulta com EXECUTAR IMEDIATA causar-lhe a falhar?
-
23-08-2019 - |
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.
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