¿Por qué la ejecución de esta consulta con EXECUTE IMMEDIATE causa que falle?
-
23-08-2019 - |
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.
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