Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum ist statisches DDL in PL/SQL nicht erlaubt?

Die Antwort lautet:PL/SQL unterstützt keinen dynamischen Polymorphismus. es unterstützt nur statischen Polymorphismus, weil

Alle PL/SQL generiert eine "DIANA" -> Descriptive Intermediate Attributed Notation für Ada , eine baumstrukturierte Zwischensprache. DIANA wird intern von Compilern verwendet.

Zur Kompilierzeit wird der PL/SQL-Quellcode in Systemcode übersetzt und generiert die entsprechende DIANA. Stellen Sie sich nun vor, wenn es eine DDL-Anweisung wie die Anweisung zum Erstellen einer Tabelle gibt, die zum Zeitpunkt der Kompilierung nicht vorhanden ist, wird sie nach dem Ausführen des Programms erstellt. Wie würde Ihre PL/SQL-Engine dann eine DIANA generieren????

Die DIANA spielt eine wichtige Rolle in PL/SQL, um zu überprüfen/validieren, dass das Unterprogramm. Dies ist erforderlich, da wir wissen, dass ein Unterprogramm Datenbankobjekte wie Tabellen, Ansichten, Synonyme oder andere gespeicherte Prozesse verwenden kann. Es ist möglich, dass sich die Objekte geändert/entfernt/gelöscht haben, wenn Sie das Programm das nächste Mal ausführen. Zum Beispiel:Jemand könnte die Tabelle gelöscht haben, die gespeicherte Proc- oder Funktionssignatur hat sich möglicherweise geändert.

Aus diesem Grund wird PL/SQL im Allgemeinen verwendet, um die Daten innerhalb der Datenbankstruktur zu manipulieren, aber nicht, um diese Strukturen zu manipulieren.

aber es gibt Möglichkeiten, mit dynamischen SQL- und DBMS_SQL-Paketen zu manipulieren, aber auch diese Methoden sollten mit Vorsicht verwendet werden. Wenn Sie beispielsweise eine Tabelle erstellen, sollten Sie zuerst prüfen, ob diese Tabelle bereits vorhanden ist, oder keine Datenwörterbuchansichten verwenden.