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

Wie verbreitet sind Oracle-Objekte?

Für den Anfang verwenden einige standardmäßige Oracle-Funktionen Typen, z. B. XMLDB und Spatial (einschließlich der Deklaration von Spalten mit Datentypen für verschachtelte Tabellen).

Außerdem verwenden viele PL/SQL-Entwickler ständig Typen, um PL/SQL-Sammlungen oder Pipeline-Funktionen zu deklarieren.

Aber ich stimme zu, dass nur wenige Orte Typen ausgiebig verwenden und daraus PL/SQL-APIs erstellen. Dafür gibt es mehrere Gründe.

  1. Oracle hat Objects sehr langsam implementiert. Obwohl sie in Version 8.0 eingeführt wurden, unterstützten sie Vererbung, Polymorphie und benutzerdefinierte Konstruktoren erst in Version 9.2 vollständig. Ohne diese Funktionen ist eine ordnungsgemäße objektorientierte Programmierung nicht möglich. Wir haben SUPER() nicht erhalten bis Version 11g. Auch jetzt fehlen Features, vor allem die privaten Deklarationen im TYPE BODY.
  2. Die Syntax ist oft klobig oder frustrierend obskur. Die Dokumentation hilft nicht weiter.
  3. Die meisten Leute, die mit Oracle arbeiten, kommen aus der relationalen/prozeduralen Schule der Programmierung. Dies bedeutet, dass sie OOP tendenziell nicht verstehen oder nicht verstehen, wo es in der Datenbankprogrammierung nützlich sein kann. Selbst wenn Leute eine nette Idee haben, finden sie es schwierig oder unmöglich, sie mit der Oracle-Syntax zu implementieren.

Der letzte Punkt ist der Schlüssel. Wir können neue Syntax lernen, wir können Oracle davon überzeugen, das Feature-Set zu vervollständigen, aber es lohnt sich nur, wenn uns eine Verwendung für Types einfällt. Das heißt, wir brauchen Probleme, die mit Vererbung und Polymorphie gelöst werden können.

Ich habe an einem System gearbeitet, das ausgiebig Typen verwendet hat. Es war ein Data-Warehouse-System, und das Subsystem zum Laden von Daten bestand aus Types. Die zugrunde liegende Begründung war einfach:

  • Wir müssen dieselbe Geschäftsregelvorlage für jede Tabelle anwenden, die wir laden, daher ist der Prozess generisch;
  • Jede Tabelle hat ihre eigene Projektion, daher sind die SQL-Anweisungen für jede Tabelle einzigartig.

Die Type-Implementierung ist sauber:Der generische Prozess ist in einem Type definiert; die Implementierung für jede Tabelle ist in einem Typ definiert, der von diesem generischen Typ erbt. Die spezifischen Typen können aus Metadaten generiert werden. Ich habe dieses Thema vor einigen Jahren auf der UKOUG vorgestellt und in meinem Blog ausführlicher darüber geschrieben. Erfahren Sie mehr.

Übrigens beinhaltet die relationale Theorie das Konzept von Domänen, bei denen es sich um benutzerdefinierte Datentypen handelt, einschließlich Einschränkungen usw. Keine Variante von RDBMS unterstützt tatsächlich Domänen, aber die Typimplementierung von Oracle ist definitiv ein Schritt auf dem Weg.