--funktionskopf einfügen, kann alternativ auch direkt in der typdefinition gemacht werden --aber da diese am anfang steht wrid das hier per alter gemacht ALTER TYPE pruefungsordnung_t ADD MEMBER FUNCTION create_student(matnr number, name varchar2, vorname varchar2) RETURN student_t CASCADE; --funktionskörper erstellen CREATE OR REPLACE TYPE BODY pruefungsordnung_t AS MEMBER FUNCTION create_student(matnr number, name varchar2, vorname varchar2) RETURN student_t     AS         student student_t;     BEGIN -- student object erstellung         student := student_t(matnr, name, vorname, ref(self), null, null, null, null); -- in die db stellen         INSERT INTO student_tab VALUES(student); -- zurückgeben         RETURN student;     END; END; -- Select * from student_tab WHERE matrikelnummer = pruefungsordnung_tab.create_student(666,'dampf','hans').Matrikelnummer; --Aufgabe 2b --Erstelle eine Methode add_pruefung(p pruefung_t, note number), welche für einen Studierenden --für die angegebene Prüfung eine Note einträgt. Als Datum für die Prüfung soll das --aktuelle Datum gesetzt werden. --Testprogramm siehe Anhang B ALTER TYPE student_t ADD MEMBER PROCEDURE add_pruefung(p pruefung_t, n number) CASCADE; --funktionskörper erstellen CREATE OR REPLACE TYPE BODY student_t AS     MEMBER PROCEDURE add_pruefung(p pruefung_t, n number) AS note note_t; student student_t; pruefung ref pruefung_t; arrayindex number;     BEGIN pruefung := REF(p);       note := note_t(sysdate, n, pruefung); arrayindex :=  self.Erbrachte_Pruefungsleistungen.count()+1;         self.Erbrachte_Pruefungsleistungen.extend();         self.Erbrachte_Pruefungsleistungen(arrayindex) := note;     UPDATE student_tab a SET a.Erbrachte_Pruefungsleistungen = self.Erbrachte_Pruefungsleistungen WHERE a.Matrikelnummer = a.Matrikelnummer;       END; END;