Objekt-relationales Datenbanksystem Oracle 1 Benutzerdefinierte Datentypen 1.1 Unvollständige Typen create-incomplete-type OR 1.2 Kollektionstypen REPLACE TYPE type-name create-varray-type OR TYPE type-name REPLACE IS VARRAY ( limit ) AS VARYING ARRAY OF datatype create-nested-table-type OR TYPE type-name REPLACE IS TABLE OF datatype AS 1
1.3 Objekttypen create-object-type AUTHID OR TYPE type-name REPLACE IS OBJECT CURRENT_USER AS DEFINER UNDER supertype ( attribute datatype element-spec NOT element-spec ) FINAL INSTANTIABLE NOT subprogram-clauses inheritance-clauses map-order-function-spec 2
inheritance-clauses NOT OVERRIDING NOT FINAL NOT subprogram-clauses INSTANTIABLE MEMBER procedure-spec STATIC function-spec map-order-function-spec MAP MEMBER function-spec ORDER procedure-spec PROCEDURE function-spec FUNCTION RETURN name name datatype ( parameter datatype ( parameter datatype ) ) 3
create-type-body OR TYPE BODY type-name REPLACE IS MEMBER procedure-declaration AS STATIC function-declaration MAP MEMBER function-declaration ORDER procedure-declaration PROCEDURE name IS pl/sql-block AS function-declaration FUNCTION RETURN name datatype END ( parameter datatype ( parameter datatype IS pl/sql-block AS ) ) 4
2 Objekttabellen create-object-table TABLE table OF object-type object-table-substitution ( object-properties ) table-properties object-table-substitution NOT object-properties SUBSTITUTABLE AT ALL LEVELS column attribute DEFAULT expr column-ref-constraint table-or-view-constraint table-ref-constraint table-properties column-constraint column-properties column-properties AS subquery object-type-col-properties nested-table col-properties 5
object-type-col-properties COLUMN column substitutable-column-clause substitutable-column-clause IS OF ( ONLY type ) ELEMENT TYPE SUBSTITUTABLE AT ALL LEVELS NOT nested-table col-properties NESTED TABLE nested-item substitutable-column-clause STORE table-ref-constraint AS storage-table SCOPE FOR ( ref-column ref-attribute ) IS scope-table-name CONSTRAINT FOREIGN contraint.name KEY ( ref-column ref-attribute ) references-clause column-ref-constraint SCOPE IS scope-table-name CONSTRAINT contraint.name references-clause 6
3 Objektsichten create-object-view OR VIEW view OF type-name REPLACE WITH OBJECT IDENTIFIER DEFAULT ( attribute UNDER superview ) ( table-or-view-constraint attribute column-constraint ) AS subquery subquery-restriction-clause 4 objekt-relationale Anfragen Ausdrücke etc. TABLE(collection-expression) [(+)] kann in einer FROM-Klausel verwendet werden um auf kollektionswertige Attribute zuzugreifen. Die optionale Angabe von (+) funktioniert ähnlich wie bei einem outer join. COLUMN_VALUE ist der Spaltenname der implizit für nested tables verwendet wird. DEREF(expr) liefert zu einem referenzwertigen Ausdruck das zugehörige Objekt. Meist kann auf DEREF verzichtet werden wenn man Pfadausdrücke verwendet die mittels. gebildet werden (s. [2 Object Access Expressions]). REF(correlation-variable) liefert die Referenzen auf die Objekte der Tabelle die durch den Tabellenalias (correlation-variable) bezeichnet wird. VALUE(correlation-variable) liefert die Objekte der Tabelle die durch den Tabellenalias (correlation-variable) bezeichnet wird. Mit expr IS [NOT] DANGLING kann getestet werden ob das durch den gegebenen Ausdruck 7
referenzierte Objekt existiert oder nicht. Mit expr IS [NOT] OF [TYPE] ([ONLY] type( [ONLY] type) ) kann getestet werden ob ein Ausdruck von einem der angegeben Typen ist oder nicht. Mit TREAT(expr AS [REF] type) kann der Typ eines Ausdrucks in einen Ober- oder Untertyp geändert werden. Mit CAST(expr AS type-name) und auch mit CAST((subquery) AS type-name) kann ein Ausdruck von einem vordefinierten Typ in einen anderen konvertiert werden. Mit CAST(MULTISET(subquery) AS type-name) kann ein Anfrageergebnis in einen Mengentyp umgewandelt werden. Mit type-name(expr( expr) ) wird ein Konstruktor zu einem Objekttyp (type-name) aufgerufen. Neben einem implizit definierten Konstruktor zu jedem Objekttyp kann man selbst weitere Konstruktoren definieren. Literatur [1] Oracle9i Database Concepts Kapitel 14 und 15. [2] Oracle9i SQL Reference. [3] Oracle9i Application Developer s Guide Object-Relational Features. [4] PL/SQL User s Guide and Reference. 8