Pourquoi cette requête ne en cours d'exécution avec EXECUTE IMMEDIATE faire échouer?
-
23-08-2019 - |
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.
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