summaryrefslogtreecommitdiffstats
path: root/Bachelor/Datenbanken 2/ORTypes.sql
diff options
context:
space:
mode:
Diffstat (limited to 'Bachelor/Datenbanken 2/ORTypes.sql')
-rw-r--r--Bachelor/Datenbanken 2/ORTypes.sql119
1 files changed, 119 insertions, 0 deletions
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
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+