Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :que signifie « exécuter immédiatement » ?

C'est pour exécuter natif SQL dynamique .

Pour DML, vous l'utiliserez lors de l'exécution d'instructions qui ne sont pas disponibles au moment de la compilation, par ex. si la liste des colonnes est basée sur une sélection de l'utilisateur.

Dans votre cas, il est utilisé car DDL ne peut pas être exécuté en tant que SQL statique à partir de PL/SQL. Seules certaines commandes de requête, DML et TCL sont valides . Tout le reste doit être traité comme dynamique.

Je dirais qu'il est rare d'avoir besoin d'utiliser DDL à partir d'un bloc PL/SQL. TRUNCATE pourrait être raisonnable ; si vous trouvez quoi que ce soit créant ou déposant des objets à la volée, cela pourrait être plus préoccupant car cela peut suggérer un modèle de données sous-optimal.

EXECUTE IMMEDIATE lui-même ne s'engage pas automatiquement ; mais si vous exécutez DDL, cela se comportera de la même manière que si vous l'exécutiez en dehors de PL/SQL, donc il sera validé dans votre cas, oui.

Incidemment, je ne sais pas pourquoi votre code utilise une variable intermédiaire pour contenir l'instruction ; c'est utile si vous voulez afficher ce qu'il va peut-être exécuter, mais vous ne semblez pas le faire. Ce que vous avez pourrait être fait comme :

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

c'est-à-dire sans utiliser V_SQL_1 du tout.