From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Bachelor/Datenbanken 2/ORTypes.sql | 119 +++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Bachelor/Datenbanken 2/ORTypes.sql (limited to 'Bachelor/Datenbanken 2/ORTypes.sql') diff --git a/Bachelor/Datenbanken 2/ORTypes.sql b/Bachelor/Datenbanken 2/ORTypes.sql new file mode 100644 index 0000000..bef07fc --- /dev/null +++ b/Bachelor/Datenbanken 2/ORTypes.sql @@ -0,0 +1,119 @@ +/* Dieses Skript enthält alle Deklarationen der Types + zum Vorlesungsbeispiel, Kapitel 7, sowie die + Deklarationen der beiden Tabellen T_Kunde und + T_Auftrag und des Methodenrumpfes der Methode + Last_Bestellung() +*/ + +-- Die Generierung der Types ************************* +CREATE TYPE Typ_Adresse +AS OBJECT +( plz NUMBER(5), + ort VARCHAR2(20), + strasse VARCHAR2(20), + hausnr VARCHAR2(5) +); +/ + +CREATE TYPE Typ_Kontakt +AS TABLE + OF VARCHAR2(20); +/ + +CREATE TYPE Typ_Telefon +AS VARRAY(3) + OF VARCHAR2(20); +/ + +-- Vorwärtsdeklaration Typ_Auftrag +CREATE TYPE Typ_Auftrag; +/ + +CREATE TYPE Typ_AuftragTab AS TABLE +OF REF Typ_Auftrag; +/ + +-- typ_kunde mit Methode + +-- Auftragsreferenzen +CREATE TYPE Typ_Kunde +AS OBJECT ( + KNr INTEGER, + Name VARCHAR2(20), + Adresse Typ_Adresse, + Telefon Typ_Telefon, + Kontakt Typ_Kontakt, + RefAuftrag Typ_AuftragTab, + MEMBER FUNCTION Last_Bestellung + RETURN date +); +/ + +CREATE TYPE Typ_Auftrag +AS OBJECT ( + ANr INTEGER, + Eingang DATE, + Bearb DATE, + RefKunde REF Typ_Kunde +); +/ +-- Methodenrumpf zur Methode Last_Bestellung +/* - Der Methodenrumpf arbeitet ausschliesslich mit + Attributen des Types Typ_Kunde, die Deklaration + ist also insbesondere unabhängig von der Deklaration + der Tabelle T_Kunde (und erst recht von der Deklaration + der Tabelle T_Auftrag) + - Die Ermittlung des maximalen Eingangsdatums erfordert + ausschliesslich ein Lesen der Einträge in der nested + table RefAuftrag des aktuellen Kundenobjektes self. +*/ +CREATE OR REPLACE TYPE BODY Typ_Kunde AS + MEMBER FUNCTION Last_Bestellung + RETURN date is + lastdate date; + BEGIN + SELECT MAX(a.column_value.Eingang) INTO lastdate + FROM table(self.RefAuftrag) a; + RETURN lastdate; + END; + END; +/ + +-- Die Generierung der beiden Tabellen ******************* +CREATE TABLE T_Auftrag +OF Typ_Auftrag ( + ANr primary key); + +CREATE TABLE T_Kunde +OF Typ_Kunde( + KNr primary key) +NESTED TABLE Kontakt + STORE AS Kunde_Kontakt_Liste, +NESTED TABLE RefAuftrag + STORE AS Kunde_Auftrag_Liste; + +/* Objekte, die als Instanzen dieser beiden + Tabellen verwaltet werden, sind Objekt-ADTs + und können über OIDs referenziert werden, + Objekte, die nur als Wert eines anderen + Objektes auftauchen, wie z.B. die Adress-Objekte + in den Kunden-Objekten, sind Werte-ADTs +*/ + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3