2009-05-19 19 views
7

Sto scrivendo una procedura PL/SQL che deve generare dinamicamente alcune query, una delle quali implica la creazione di una tabella temporanea utilizzando i risultati di una query eseguita come parametro.Perché l'esecuzione di questa query con EXECUTE IMMEDIATE non riesce?

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

Compila correttamente, ma anche con le query molto semplici come ad esempio con:

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

getta ORA-00911: invalid character. Se eseguo manualmente la query creata, viene eseguita correttamente. A questo punto sono in grado di determinare qual è la causa del problema.

+1

spero che proc non viene eseguito nel normale corso degli eventi da parte vostra applicazione ... dinamica DDL è solo davvero appropriato per script admin (ad esempio l'impostazione di un nuovo ambiente). –

risposta

23

Provare a perdere il ";" dall'interno della stringa che esegui immediatamente.

EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')'; 
Problemi correlati