Databases Reference
In-Depth Information
Tupeln enthalten. Wenn eine solche Tabelle nur ein Attribut enthält, handelt es sich
eben um eine Multimenge von Einzelwerten. Die Einbettung einer Tabelle, die
selbst auf einem Objekttyp beruht, in einen anderen Objekttyp stellt eine sehr enge
Verbindung dar. Wir haben sie in Kapitel 3.3 als Komposition eingeführt. In unse-
rer Fallstudie kann die Verbindung zwischen einer Bestellung und ihren Posi-
tionen als Komposition aufgefasst werden. Im Entity-Relationship-Modell würde
man einen eingebetteten Objekttyp als abhängigen Entitätstyp modellieren.
Um diese Idee umzusetzen, müssen wir erst einen Objekttyp für Positionen defi-
nieren, den wir dann in einen Typ für Bestellungen einbetten. Langsam werden
unsere Objekttypen auch komplexer, denn eine Position enthält einen Verweis auf
einen Artikel. Wir verwalten Artikel unabhängig von Bestellpositionen und sollten
deshalb hierfür eine Referenz einsetzen. Da der Typ otyp_artikel selbst wieder ein
Attribut vom Typ REF otyp_mwsatz enthält, haben wir dann gleich eine mehrstufige
Referenz. Wir zeigen hierbei auch noch einmal ein Beispiel für eine Methode mit
dem Namen get_artikel_nr , die die Anzeige der Artikelnummer einer Bestellposi-
tion etwas einfacher gestaltet.
CREATE OR REPLACE TYPE otyp_position AS OBJECT (
pos_artikel REF otyp_artikel,
mwst number (4,3),
-- tatsaechlich angewandter MWST-Satz als Dezimalzahl
bestellmenge number (5,0),
liefermenge number(5,0),
gesamtpreis number(10,2),
MEMBER FUNCTION get_artikel_nr RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES (get_artikel_nr, WNDS, WNPS)
);
CREATE OR REPLACE TYPE BODY otyp_position AS
MEMBER FUNCTION get_artikel_nr RETURN VARCHAR2 IS
lvar_artnr VARCHAR2(4);
BEGIN
SELECT artikel_nr INTO lvar_artnr
FROM otab_artikel a
WHERE VALUE(a) = DEREF(pos_artikel);
RETURN lvar_artnr;
END get_artikel_nr;
;
Wir haben nunmehr den Typ einer einzelnen Position beschrieben. Wenn wir eine
ganze Tabelle davon in eine Bestellung einbetten wollen, müssen wir einen Kollek-
tionstyp definieren.
CREATE OR REPLACE TYPE ntyp_position AS TABLE OF otyp_position;
 
Search WWH ::




Custom Search