Notizen zu den objekt-relationalen Elementen in Oracle

Werbung
Objekt-relationales Datenbanksystem
Oracle
1 Benutzerdefinierte Datentypen
1.1 Unvollständige Typen
create-incomplete-type
- CREATE
- TYPE - type-name - ;
- OR - REPLACE
1.2 Kollektionstypen
create-varray-type
- CREATE
- TYPE - type-name
- OR - REPLACE
- IS
- AS
- VARRAY
- ( - limit - )
- VARYING - ARRAY
- OF - datatype - ;
create-nested-table-type
- TYPE - type-name
- CREATE
- OR - REPLACE
- IS
- AS
- TABLE - OF - datatype - ;
1
1.3 Objekttypen
create-object-type
- CREATE
- TYPE - type-name
- OR - REPLACE
- IS
- AS
- AUTHID
- CURRENT_USER
- UNDER
- DEFINER
- OBJECT
- supertype
- (
- attribute - datatype
- )
- element-spec
, - ;
- FINAL
- INSTANTIABLE
- NOT
- NOT
element-spec
- subprogram-clauses
-
- inheritance-clauses
- map-order-function-spec
2
inheritance-clauses
- OVERRIDING
- FINAL
- NOT
- NOT
-
- INSTANTIABLE
- NOT
subprogram-clauses
- MEMBER
- STATIC
- procedure-spec
- function-spec
map-order-function-spec
- MAP
- MEMBER - function-spec
- ORDER
-
procedure-spec
- PROCEDURE - name
-
- (
- parameter - datatype
, - )
function-spec
- FUNCTION - name
- (
- parameter - datatype
, - RETURN - datatype
- )
-
3
create-type-body
- CREATE
- TYPE - BODY - type-name
- OR - REPLACE
- IS
- AS
- MEMBER
- STATIC
- procedure-declaration
- function-declaration
- MAP
- MEMBER - function-declaration
- ORDER
- END - ;
procedure-declaration
- PROCEDURE - name
- (
- parameter - datatype
, - )
- IS
- AS
- pl/sql-block
-
function-declaration
- FUNCTION - name
- (
- parameter - datatype
, - RETURN - datatype
- )
- IS
- AS
- pl/sql-block
4
-
2 Objekttabellen
create-object-table
- CREATE - TABLE - table - OF - object-type
- object-table-substitution
- ( - object-properties - )
- ;
- table-properties
object-table-substitution
- SUBSTITUTABLE - AT - ALL - LEVELS
- NOT
object-properties
- column
- attribute
- DEFAULT - expr
-
- column-ref-constraint
- column-constraint
- table-or-view-constraint
- table-ref-constraint
table-properties
-
- column-properties
- AS - subquery
column-properties
- 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 - AS - storage-table
-
table-ref-constraint
- SCOPE - FOR - (
- ref-column
- )
- ref-attribute
-
- IS - scope-table-name
- CONSTRAINT - contraint.name
- FOREIGN - 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
- VIEW - view - OF - type-name
- CREATE
- OR - 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
Herunterladen