Perché l'esecuzione di questa query con EXECUTE IMMEDIATE causa il fallimento?
-
23-08-2019 - |
Domanda
Sto scrivendo una procedura PL / SQL che deve per generare dinamicamente alcune query, uno dei quali comporta la creazione di una tabella temporanea utilizzando i risultati di una query preso come parametro.
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
E 'compilato correttamente, ma anche con le query molto semplici come ad esempio con:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
getta ORA-00911: invalid character
. Se corro la query creata manualmente viene eseguito correttamente. A questo punto sono in grado di determinare la causa del problema.
Soluzione
Prova a perdere il ";" da dentro la stringa che si esegue immediato.
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow