Question

Je suis en train d'écrire une procédure PL / SQL qui doit de générer dynamiquement des requêtes, l'une qui consiste à créer une table temporaire à l'aide des résultats d'une requête prise comme paramètre.

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

Il compile correctement, mais même avec des requêtes très simples comme avec:

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

IT lance ORA-00911: invalid character. Si je lance la requête créée il fonctionne manuellement correctement. À ce stade, je suis en mesure de déterminer ce qui est à l'origine du problème.

Était-ce utile?

La solution

Essayez de perdre le « ; » à l'intérieur de la chaîne que vous exécutez immédiat.

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top