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

Pourquoi le ddl statique n'est-il pas autorisé en PL/SQL ?

La réponse est que PL/SQL ne prend pas en charge le polymorphisme dynamique. il ne supporte que le polymorphisme statique car

Tout PL/SQL génère une "DIANA" -> Descriptive Intermediate Attributed Notation pour Ada , un langage intermédiaire arborescent. DIANA est utilisé en interne par les compilateurs.

Au moment de la compilation, le code source PL/SQL est traduit en code système et génère la DIANA correspondante. Maintenant, pensez que s'il y avait une instruction DDL comme l'instruction create table qui n'existe pas au moment de la compilation, elle sera créée après l'exécution du programme. comment votre moteur PL/SQL générerait-il alors une DIANA ????

La DIANA joue un rôle important en PL/SQL pour vérifier/valider ce sous-programme. cela est nécessaire car nous savons qu'un sous-programme peut utiliser des objets de base de données tels que des tables, des vues, des synonymes ou d'autres procédures stockées. il est possible que les objets aient été modifiés/supprimés/supprimés lors de la prochaine exécution du programme. Par exemple :quelqu'un a peut-être supprimé la table, la proc stockée ou la signature de la fonction peut avoir changé.

C'est pourquoi généralement PL/SQL est utilisé pour manipuler les données dans la structure de la base de données, mais pas pour manipuler ces structures.

mais il existe des moyens de manipuler à l'aide du package SQL dynamique et DBMS_SQL, mais cette méthodologie doit à nouveau être utilisée avec prudence. Par exemple, si vous créez une table, vous devez d'abord vérifier si cette table existe déjà ou n'utilise pas les vues du dictionnaire de données.