Pregunta

Estoy escribiendo un procedimiento PL / SQL que necesita para generar dinámicamente algunas consultas, uno de los cuales implica la creación de una tabla temporal utilizando los resultados de una consulta tomado como parámetro.

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

Se compila correctamente, pero incluso con consultas muy simples, como con:

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

TI lanza ORA-00911: invalid character. Si me quedo la consulta creada manualmente se ejecuta correctamente. En este momento estoy en condiciones de determinar qué está causando el problema.

¿Fue útil?

Solución

Trate de perder el ";" desde el interior de la cadena que se ejecuta inmediata.

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top