Objektrelationale Datenbanken am Beispiel Oracle Prof T Kudra
Objektrelationale Datenbanken (am Beispiel Oracle)
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Objekt l Objekt – – – – Einheit von Struktur und Verhalten Struktur: Attribute / Verhalten: Methoden Zustand eines Objekts: Attributwerte Methoden: Lesen und Ändern des Zustands Kommunikation mit anderen Objekten über Methoden persistent vs. transient Identität unabhängig von Zustand Gehört zu einem Objekttyp
© Prof. T. Kudraß, HTWK Leipzig Objekttyp Einführendes Beispiel Methode Ship order_no cust_info line_items amount Hold Cancel Bestellung Attribut Check. Status – Ist ein benutzerdefinierter zusammengesetzter Datentyp – Kapselt eine Datenstruktur zusammen mit den benötigten Methoden zur Manipulation
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Methoden l Methode – – – Funktion, die auf einem Objekt aufgerufen wird Implementiert beliebigen Code Bestandteile: l l l Konstruktur & Destruktor – l Signatur (Deklaration): Name und Parameter Rumpf: Implementierung der Funktionalität Besondere Methoden zum Erzeugen und Vernichten von Objekten Arten vom Methoden – – – lesende ändern statische (Klassenmethoden)
© Prof. T. Kudraß, HTWK Leipzig Struktur eines Objekttyps Spezifikation Public Interface Attributdeklarationen Methodenspezifikationen Rumpf Private Implementation Methodenrümpfe
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Kapselung l Kapselung – – l Zustand nur über öffentliche (public) Methoden abfragbar Nicht öffentliche Methoden und Attribute nur objektintern zugänglich Strikte Kapselung – – Zugang nur über get- und set-Methoden (für ein bestimmtes Attribut) automatische Generierung der Zugriffsmethoden
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Objektidentität l OID – – – l Typen von Gleichheit – – – l Identifizierendes künstliches Merkmal eines Objekts Systemdefinierter Identifikator (Surrogat) – vor Anwender verborgen Ohne Semantik! (anders als Primärschlüssel) Unveränderlich während Lebenszeit des Objekts Referenztypen und Methoden zur Arbeit mit OIDs durch System angeboten identisch (OIDs gleich) flach-gleich (alle Attribute gleich) Tiefgleich (Gleichheit gilt auch für alle referenzierten Objekte) Kopieren: flach vs. tief
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Klasse l Definition – l Zwei Sichtweisen – – l Menge von Objekten mit gleichen Attributen (Merkmalen) und Methoden (Verhalten) Intension: Beschreibung von Attributen und Methoden = Typ einer Klasse (bzw. Objekttyp) Extension: Menge der aktuell existierenden Objekte (Instanzen) dieser Klasse Programmiersprachen: – – Z. B. Java / C++: Klassenbegriff rein intensional In Datenbanken: Extensionen persistent gespeichert
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Spezialisierung l l Ziel: möglichst redundanzfreie Speicherung von Eigenschaften Klassen in Sub-/Superklassenbeziehungen (ISA-Beziehung) Intensional: Subklasse erbt Attribute und Methoden der Superklasse (Typvererbung) Extensional: Untermengenbeziehung zwischen Extensionen von Sub- und Superklasse
© Prof. T. Kudraß, HTWK Leipzig Objektorientierte Konzepte Spezialisierung (Forts. ) l l Substituierbarkeit: Objekt überall dort einsetzbar wo auch Superklasse erlaubt ist Mehrfachspezialisierung: – – l mehrere Superklassen Erfordert Konfliktauflösung beim Erben gleichnamiger Attribute oder Methoden Polymorphismus (Überladen) / spätes Binden (late binding) – Bei Aufruf einer Methode wird die Implementierung ausgewählt in Abhängigkeit vom aufgerufenen Objekttyp
© Prof. T. Kudraß, HTWK Leipzig Objektorientierung in Datenbanken l Objektorientierte Datenbanksysteme – – – l Relationale DBMS behielten Überlegenheit – – l 1985 – 1995 SQL-ähnliche Anfragesprache (OQL; Object Query Language) Vertreter: O 2, POET, Object. Store, Versant, Objectivity, Ontos, Gemstone Anfrageoptimierung Transaktionsverwaltung Zugriffskontrolle SQL: 1999: Standard mit vielen objektorientierten Erweiterungen Objektrelationale Mapping-Tools – – Brückenschlag zwischen OO Programmiersprachen und RDBMS Vertreter: EJB, JDO, OJB, Hibernate
© Prof. T. Kudraß, HTWK Leipzig Objektrelationale Konzepte im SQL-Standard l Typkonstruktoren – l Benutzerdefinierte Datentypen – – l l l Distinct-Typen: Kopien eines Basisdatentyps unter eigenem Namen Strukturierte Typen: Attribute und Methoden, Subtyp-Beziehung möglich Benutzerdefinierte Casts (Typumwandlungen) Benutzerdefinierte Ordnungen Typisierte Tabellen – – l geschachtelte Anwendung: beliebig komplexe Datentypen Basieren auf strukturiertem Typ Tabellenhierarchien (Subtabelle steht in Untermengenbeziehung zur Supertabelle) Typisierte Sichten – – Basieren auf strukturiertem Typ (liefern typisierte Tabelle) Sichtenhierarchien
© Prof. T. Kudraß, HTWK Leipzig Objektrelationale Konzepte in Oracle (Überblick) l l l l Definition von Objekttypen (CREATE TYPE) Objekttypen und Referenzen (REF) Methoden Collections (VARRAY & Nested Table) Typvererbung (UNDER) Polymorphismus (Overriding, Overloading) Funktionen und Prädikate für Objekte (REF, DEREF, TREAT, IS OF)
© Prof. T. Kudraß, HTWK Leipzig Spezifikation eines Objekttyps Syntax CREATE TYPE type_name AS OBJECT [(attribute 1 datatype, attribute 2 datatype, . . . ] [MEMBER procedure 1 | function 1 spec, procedure 2 | function 2 spec, . . . )]
© Prof. T. Kudraß, HTWK Leipzig Rumpf eines Objekttyps Syntax CREATE TYPE BODY type_name AS [MEMBER procedure 1 | function 1 body, procedure 2 | function 2 body, . . . ]
© Prof. T. Kudraß, HTWK Leipzig Spezifikation eines Objekttyps (Beispiel) CREATE OR REPLACE TYPE katalogeintrag AS OBJECT( bestellnr NUMBER, preis VARCHAR 2(10), verlag VARCHAR 2(30), CONSTRUCTOR FUNCTION katalogeintrag (vbestellnr IN NUMBER, vpreis IN VARCHAR 2) MEMBER PROCEDURE neuerpreis (neupreis varchar 2), MEMBER FUNCTION print RETURN VARCHAR 2 ) NOT FINAL;
© Prof. T. Kudraß, HTWK Leipzig Rumpf eines Objekttyps Konstruktormethode (Beispiel) CREATE OR REPLACE TYPE BODY katalogeintrag AS -- Definition des benutzerdefinierten Konstruktors CONSTRUCTOR FUNCTION katalogeintrag (vbestellnr IN NUMBER, vpreis IN VARCHAR 2) RETURN SELF AS RESULT IS BEGIN SELF. bestellnr: =vbestellnr; SELF. preis: =vpreis; SELF. verlag: =‘Spektrum Akademischer Verlag‘; RETURN; END;
© Prof. T. Kudraß, HTWK Leipzig Rumpf eines Objekttyps Definition der Methoden (Forts. ) -- Definition der Memberprozedur neuer. Preis MEMBER PROCECURE neuer. Preis (neupreis VARCHAR 2) IS BEGIN SELF. preis: =neupreis; END; -- Definition der Memberfunktion print MEMBER FUNCTION print (neupreis VARCHAR 2) IS BEGIN RETURN ‘Bestellnummer: ‘|| bestellnr || ‘; Preis: ‘ || preis || ‘; Verlag‘ || verlag ; END; -- Ende Typdefinition END;
© Prof. T. Kudraß, HTWK Leipzig Definition eines Subtyps -- Definition eines Subtyps Buch von Katalogeintrag CREATE OR REPLACE TYPE buch UNDER katalogeintrtag ( isbn VARCHAR 2(13), titel. VARCHAR 2(300), autor VARCHAR 2(30), OVERRIDING MEMBER FUNCTZION print RETURN VARCHAR 2 ); l weitere Details zur Typvererbung später im Skript
© Prof. T. Kudraß, HTWK Leipzig Aufruf von Objektmethoden SET SERVEROUTPUT ON; DECLARE k 1 katalogeintrag; k 2 katalogeintrag; BEGIN -- Aufruf des Standardkonstruktors k 1: =katalogeintrag(135782, ’ 48, 95 €. ‘, ‘Hanser-Verlag‘); -- Ausgabe von k 1 mittels Memberfunktion PRINT dbms_output. put_line(k 1. print); -- Aufruf des benutzerdef. Konstruktors von katalogeintrag k 2: =katalogeintrag(879564, ’ 31, 70 €‘); -- Ausgabe von k 2 mittels Memberfunktion print dbms_output. put_line(k 2. print); -- Test der Memberprozedur neuerpreis k 1. neuerpreis(’ 47, 25 €‘); dbms_output. put_line(k 1. bestellnr || ‘ ‘ || k 1. preis); END;
© Prof. T. Kudraß, HTWK Leipzig Verwendung von Objekten Objekttabellen CREATE TABLE katalog OF katalogeintrag ( CONSTRAINT katalog_pk PRIMARY KEY(bestellnr) ); -- Einfügen eines DS mittels benutzerdef. Konstruktor von -- Katalogeintrag INSERT INTO katalog values (katalogeintrag(879564, ’ 31, 70 €‘)); -- Einfügen eines DS mittels Standardkonstruktor von buch INSERT INTO katalog values (buch(453721, ’ 52, 90 €‘, ‘Spektrum Akademischer Verlag ‘, ‘ 3 -8274 -065 -1‘, ‘Lehrbuch der Softwaretechnik‘, ‘Helmut Balzert‘)); -- Ausgabe der DS des Supertyps SELECT * from katalog; -- Ausgabe in Objektform SELECT VALUE(k) FROM katalog k;
© Prof. T. Kudraß, HTWK Leipzig Objekttypen und Referenzen l REF (Reference) – – – – logischer „Pointer" zu einem Row-Objekt (Datensatz) Eingebauter (built-in) Datentyp a row object Genutzt für Assoziationen zwischen Objekten (zusammen mit REF-Collections) – keine Foreign Keys nötig! Erlaubt einfache Navigation durch Objekte (Punkt-Notation zum Verfolgen der Pointer) – keine Joins nötig! Prüfen oder Ändern des referenzierten Objekts möglich Lesen einer Kopie eines referenzierten Objekts Ändern des REF-Wertes (Verweis auf anderes Objekt oder Null-Setzen) „dangling reference“ feststellbar (SCOPE-Klausel kontrolliert nicht referentielle Integrität)
© Prof. T. Kudraß, HTWK Leipzig REF (Referenztypkonstruktor) Beispiele CREATE TYPE person AS OBJECT ( name VARCHAR 2(30), manager REF person ); Zugriff auf ein Objekt X des Typs PERSON x. manager. name; Zugriff auf eine Referenz DECLARE Order. Ref REF TO purchase_order; SELECT REF(po) INTO Order. Ref FROM purchase_order_table po WHERE po. id = 1000376;
© Prof. T. Kudraß, HTWK Leipzig Scoped REF l l Bei Definition eines REF-Typs Beschränkung der referenzierten Tabelle möglich (scoped REF) Vorteile: – – l Effizienterer Zugriff Weniger Speicherverbrauch Beispiel: CREATE TABLE people ( id NUMBER(4), name_objtyp, address_ref REF address_objtyp SCOPE is address_objtab, phones_ntab phone_ntabtyp) NESTED TABLE phones_ntab STORE AS phone_store_ntab 2;
© Prof. T. Kudraß, HTWK Leipzig Methoden l l l Member-Methoden zum Zugriff auf Objektinstanzen SELF: Objektinstanz der aufgerufenen Methode („SELF“ kann weggelassen werden) Methoden zum Vergleich von Objekten Basisdatentypen: Ordnung vordefiniert – Benutzerdefinierte Typen: Basis zum Vergleichen und Ordnen von Objekten muss definiert werden 2 spezielle Typen von Methoden: MAP und ORDER –
© Prof. T. Kudraß, HTWK Leipzig MAP Methode Beispiel l Abbildung (mapping) von Objekt-Instanzen auf Basisdatentypen, Ordnen durch Aufruf MAP-Methode l obj_1 > obj_2 obj 1_map() > obj 2. map() CREATE TYPE Rectangle_typ AS OBJECT( len. NUMBER, wid. NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER, . . . ); CREATE TYPE BODY Rectangle_typ AS MAP MEMBER FUNCTION area RETURN NUMBER IS BEGIN RETURN len * wid; END area; . . . END;
© Prof. T. Kudraß, HTWK Leipzig Varray l l l Geordnete Menge von Datenelementen des gleichen Datentyps mit variabler Anzahl (v) Index eines Elements = Positions-Nr. im Array Beispiel: CREATE TYPE prices AS VARRAY(10) OF NUMBER(12, 2) l Verwendung eines Varray: – – – Spaltentyp einer Tabelle (damit keine 1 NF mehr) Attribut eines Objekttyps Typ einer PL/SQL Variablen, Parameter oder Rückgabewert einer Funktion
© Prof. T. Kudraß, HTWK Leipzig Nested Table l l Ungeordnete Menge von Datenelementen des gleichen Typs Hat nur eine Spalte (Basistyp oder benutzerdefiniert) Kann auch als Multi-Column-Table betrachtet werden, wenn Elementtyp OBJECT TYPE ist. Beispiel -- Definition des Tabellentyps artikel_table_type für NT CREATE TYPE artikel_table_type AS TABLE OF katalogeintrag; -- Definition einer Tabelle Publikationen mit NT-Spalte CREATE TABLE publikationen ( jahrgang NUMBER PRIMARY KEY, katalogartikel_table_type ) NESTED TABLE katalogartikel STORE AS artikel_tab;
© Prof. T. Kudraß, HTWK Leipzig Multilevel-Collection-Types l l l Schachtelung von Collection Types in mehreren Ebenen Beliebig komplexe Typen möglich Mehrfach geschachtelte Collection Types: – – – Nested Table of Nested Table Type Nested Table of Varray Type Varray of Nested Table Type Varray of Varray Type Nested Table oder Varray of a User-Defined Type mit Attribut vom Typ Nested Table oder Varray Type
© Prof. T. Kudraß, HTWK Leipzig Storage-Tables für Nested Tables l l l Storage-Table (STORE-Klausel) – zum Speichern der Zeilen einer Nested Table – Bei Mehrfachschachtelung auf jeder Ebene Bezugnahme auf innere Tabelle möglich (z. B. artikel_tab) weil Attribut vorhanden (anderenfalls: COLUMN VALUE-Klausel) Weitere physikalische Attribute (Speicherungsoptionen) möglich
© Prof. T. Kudraß, HTWK Leipzig Einfügen von Datensätzen bei Nested-Table-Objekten -- Einfügen von DS in die Tabelle mit Werten für die NT-Spalte INSERT INTO publikationen VALUES (2006, artikel_table_type (buch(453721, ’ 52, 90 €‘, ‘Spektrum Akademischer Verlag ‘, ‘ 38274 -065 -1‘, ‘Lehrbuch der Softwaretechnik‘, ‘Helmut Balzert‘))); -- Einfügen eines DS in die Tabelle ohne NT-Daten INSERT INTO publikationen VALUES (2007, artikel_table_type ());
© Prof. T. Kudraß, HTWK Leipzig Einfügen von Datensätzen bei Nested-Table-Objekten (Forts. ) -- Hinzufügen von Datensätzen zur Nested Table INSERT INTO TABLE (SELECT p. katalogartikel FROM publikationen p WHERE p. jahrgang=2007) VALUES (buch(163241, ’ 84, 80 €‘, ‘Spektrum Akademischer Verlag ‘, ‘ 3 -8274 -0285 -9‘, ‘Lehrbuch der Objektmodellierung‘, ‘Heide Balzert‘)); INSERT INTO TABLE (SELECT p. katalogartikel FROM publikationen p WHERE p. jahrgang=2007) VALUES (buch(870021, ’ 49, 60 €‘, ‘Spektrum Akademischer Verlag ‘, ‘ 3 -8274 -1449 -0‘, ‘Objektorientierte Programmiersprachen‘, ‘Klaus Zeppenfeld‘));
© Prof. T. Kudraß, HTWK Leipzig Entschachteln von Collection Queries (Beispiel) l Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten SELECT e. empname, e. projects FROM employees e; EMPNAME PROJECTS -------'Bob' PROJECTS_LIST_NT(14, 23, 144) 'Daphne' PROJECTS_LIST_NT(14, 35) l Entschachteln von Collections bei Queries (Unnest): – – – Umwandeln in Zeilen (Rows) TABLE Expression – erlaubt die Verwendung einer Collection in FROMKlausel Entspricht einem Join zwischen Nested Table und der Zeile, diese enthält
© Prof. T. Kudraß, HTWK Leipzig Anfragen auf Collections l Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten SELECT e. empname, p. * FROM employees e, TABLE(e. projects) p; EMPNAME ------'Bob' 'Daphne' PROJECTS -------14 23 144 14 35
© Prof. T. Kudraß, HTWK Leipzig Anfragen auf Collections (Forts. ) l Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten (Variante ohne Angestelltennamen) SELECT * FROM employee e, TABLE(e. projects); PROJECTS ------14 23 144 14 35
© Prof. T. Kudraß, HTWK Leipzig DML-Befehle auf Collections (Weitere Beispiele) INSERT INTO TABLE(SELECT e. projects FROM employees e WHERE e. eno = 100) VALUES (1, 'Project Neptune'); UPDATE TABLE(SELECT e. projects FROM employees e WHERE e. eno = 100) p SET VALUE(p) = project_typ(1, 'Project Pluto') WHERE p. pno = 1; DELETE FROM TABLE(SELECT e. projects FROM employee e WHERE e. eno = 100) p WHERE p. pno = 1;
© Prof. T. Kudraß, HTWK Leipzig Typvererbung (Type Inheritcance) l Spezialisierung eines Subtyps: – – – Hinzufügen neuer Attribute (keine Veränderung geerbter Attribute) Hinzufügen neuer Methoden, die im Supertyp nicht vorhanden sind Ändern der Implementierung einer geerbten Methode l Beispiel Object Type: Shape Methode: calculate_area() 2 Subtypen: Rectangle_Shape Circular_Shape unterschiedl. Implementierungen von calculate_area()
© Prof. T. Kudraß, HTWK Leipzig FINAL vs. NOT FINAL Typen und Methoden l l l NOT FINAL: erlaube Subtypen Änderung der FINAL-Eigenschaft über ALTER TYPE FINAL / NOT FINAL auch auf Methoden anwendbar CREATE TYPE Person_typ AS OBJECT ( ssn NUMBER, name VARCHAR 2(30), address VARCHAR 2(100)) NOT FINAL; ALTER TYPE Person_typ FINAL; CREATE TYPE T AS OBJECT (. . . , MEMBER PROCEDURE Print(), FINAL MEMBER FUNCTION foo(x NUMBER). . . ) NOT FINAL;
© Prof. T. Kudraß, HTWK Leipzig Definition von Typhierarchien l l Subtypen mittels CREATE TYPE und UNDER-Klausel Beispiele: CREATE TYPE Student_typ UNDER Person_typ ( deptid NUMBER, major VARCHAR 2(30)) NOT FINAL; CREATE TYPE Employee_typ UNDER Person_typ ( empid NUMBER, mgr VARCHAR 2(30)); CREATE TYPE Part. Time. Student_typ UNDER Student_typ ( numhours NUMBER);
© Prof. T. Kudraß, HTWK Leipzig NOT INSTANTIABLE Typen und Methoden l l l NOT INSTANTIABLE: Keine Instanzen dieses Typs möglich (auch keine Konstruktor-Methode) Auch anwendbar auf Methoden ohne Implementierung (Platzhalter) → zugehöriger Typ darf dann auch noch instanziierbar sein Beispiele: CREATE TYPE Address_typ AS OBJECT(. . . ) NOT INSTANTIABLE NOT FINAL; CREATE TYPE USAddress_typ UNDER Address_typ(. . . ); CREATE TYPE Intl. Address_typ UNDER Address_typ(. . . ); CREATE TYPE T AS OBJECT ( x NUMBER, NOT INSTANTIABLE MEMBER FUNCTION func 1() RETURN NUMBER ) NOT INSTANTIABLE NOT FINAL;
© Prof. T. Kudraß, HTWK Leipzig Überladen von Methoden (Overloading) l l Wenn Vielzahl von Varianten der Ausführung einer Methode Mehrere Methoden mit gleichem Namen in einem Typ Unterscheidung anhand der Signatur: Methodenname, Anzahl, Typen und Reihenfolge der Parameter Beispiel: unterschiedliche draw()-Methoden (z. B. Hinzufügen eines Text. Labels erfordert zusätzlichen Parameter) CREATE TYPE My. Type_typ AS OBJECT (. . . , MEMBER PROCEDURE foo(x NUMBER), . . . ) NOT FINAL; CREATE TYPE My. Sub. Type_typ UNDER My. Type_typ (. . . , MEMBER PROCEDURE foo(x DATE), STATIC FUNCTION bar(. . . );
© Prof. T. Kudraß, HTWK Leipzig Überschreiben von Methoden (Overriding) l l Redefinition einer geerbten Methode im Subtyp, um dessen Spezifik zu berücksichtigen Beispiel: Methode calculate_area() (spezielle Formel bei kreisförmigen Formen gegenüber Rechtecken) Überschreibende Methode wird ausgeführt bei Zugriff auf Instanz des Subtyps Beim Overriding bleibt Signatur erhalten (anders als bei Overloading!) CREATE TYPE My. Type_typ AS OBJECT (. . . , MEMBER PROCEDURE Print(), FINAL MEMBER FUNCTION foo(x NUMBER). . . ) NOT FINAL; CREATE TYPE My. Sub. Type_typ UNDER My. Type_typ (. . . , OVERRIDING MEMBER PROCEDURE Print(), . . . );
© Prof. T. Kudraß, HTWK Leipzig Substituierbarkeit (Substitutability) l Typen sind substituierbar – – l Beispiele: – – l Lesen von Personen (liefert auch Instanzen der Subtypen Student, Employee) Einschränkungen beim Arbeiten in Typhierarchien (z. B. „nur Personen, die keine Studenten sind. . “ Substituierbarkeit anwendbar bei: – – – l Supertyp substituierbar durch einen seiner Subtypen Subtyp-Instanz ist zugleich auch Instanz des Supertyps Attributen Spalten Zeilen (Rows) bei Object Tables oder Views REF zu einem Objekttyp Collection-Typen Substituierbarkeit kann ausgeschaltet werden
© Prof. T. Kudraß, HTWK Leipzig Beispiel: Beschränkung der Substituierbarkeit l Beschränkung der Subtypen, die in Spalte/Attribut erlaubt sind, möglich mittels IS OF type - Constraint l Beispiel: Erzeuge eine Tabelle vom Typ Book_Type, wobei die Autoren der Bücher ausschließlich Studenten sein dürfen CREATE TABLE Student_books OF Book_typ COLUMN author IS OF (ONLY Student_typ);
© Prof. T. Kudraß, HTWK Leipzig Funktionen und Prädikate für den Umgang mit Objekten l VALUE: l In: Tabellen-Alias für Object Table oder Object View Out: Objektinstanzen, die in Object Table oder View als Rows enthalten sind Beispiele: SELECT VALUE(p) FROM person_table p WHERE p. name = "John Smith"; SELECT VALUE(p) FROM ONLY(Person_v) p; UPDATE TABLE (SELECT e. projects FROM employees e WHERE e. eno = 100) p SET VALUE(p) = project_typ(1, 'Project Pluto') WHERE p. pno = 1;
© Prof. T. Kudraß, HTWK Leipzig Funktionen und Prädikate für den Umgang mit Objekten (2) l REF: l In: Tabellen-Alias für Object Table oder Object View Out: Referenz zu einer Instanz Beispiel: SELECT REF(p) FROM Person_v p WHERE p. id = 0001 ; l DEREF: l liefert die Objekt-Instanz, auf die eine REF verweist Beispiel: SELECT DEREF(p)) FROM Person_v p;
© Prof. T. Kudraß, HTWK Leipzig Funktionen und Prädikate für den Umgang mit Objekten (3) l TREAT: – – l Zwei Anwendungen – – l zur Typanpassung (meist: Subtyp statt Supertyp) z. B. Behandlung einer Person als Student Bei Zuweisungen an Variablen spezialisierter Typen (Supertyp-Wert → Subtyp) Zugriff auf Attribute oder Methoden eines Subtyps des deklarierten Typs von Zeile oder Spalte Beispiel: SELECT name, TREAT(VALUE(p) AS Student_typ). major FROM persons p; NAME MAJOR -----Bob null Joe HISTORY Tim PHYSICS
© Prof. T. Kudraß, HTWK Leipzig Funktionen und Prädikate für den Umgang mit Objekten (4) l IS OF type: – l Prädikat zum Test, ob Objekt-Instanz zum jeweiligen Subtyp gehört Beispiele: SELECT VALUE(p) FROM persons p WHERE VALUE(p) IS OF (Student_typ); VALUE(p) -------Student_typ('Joe', 3456, 12, 10000) Part. Time. Student_typ('Tim', 5678, 13, 1000, 20) SELECT b. title, b. author FROM books b WHERE b. author IS OF (ONLY Student_typ); TITLE AUTHOR -----Business Rules Student_typ('Joe', 3456, 12, 10000)
- Slides: 48