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.

È stato utile?

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
scroll top