Blagi Geschrieben 24. April 2009 Teilen Geschrieben 24. April 2009 (bearbeitet) Zuerst mal ein höfliches Hallo an alle :-) Ich beschäftige mich erst seit wenigen Tagen mit PL/SQL und es bereitet mir leider Kopfschmerzen. Diesbezüglich würde ich euch bei meinem Problem um ein wenig Hilfe bitten. Meine Problemstellung: 2 Tabellen: Schueler: S_SCHNR S_K_KLASSE S_NAME S_VORNAME S_GEBDAT S_ADRESSE Lehrer: L_ID L_NAME L_VORNAME L_L_CHEF L_GEBDAT L_GEHALT Nun muss ich eine Prozedur erstellen bei welcher man den Klassennamen (S_K_KLASSE) mitangibt wo dann die sämtliche Vornamen und Nachnamen aller Lehrer und der Schüler welche in der von der Prozedur übergeben Klasse sind, darstellt. ---------------- Meine Hoffnung liegt nicht dabei, hier eine Lösung präsentiert zu bekommen (was aber auch sehr toll wäre), vielmehr würde ich gerne verstehen auf welche Sachen bei solch einer Problemstellung zu achten ist um dies besser verstehen zu können. Ich habe das Ganze versucht folgendermaßen zu lösen, jedoch ist dies mit Scherheit ein falscher Ansatz welcher viele Fehler beinhaltet. set serveroutput on CREATE OR REPLACE PROCEDURE p_liste (p_klasse IN varchar2) IS DECLARE zeile number boolean := false; BEGIN DECLARE CURSOR emp_cur SELECT abc.vorname, abc.nachname FROM ( SELECT l_vorname vorname, l_name nachname FROM lehrer UNION SELECT s_vorname vorname, s_name nachname FROM schueler WHERE s_k_klasse='03TA' ) abc ORDER BY abc.nachname ASC; my_name abc%ROWTYPE; ----------------------------------- BEGIN OPEN emp_cur; LOOP FETCH emp_cur INTO my_name; EXIT WHEN emp_cur%NOTFOUND; if zeile == FALSE THEN dbms_output.put(my_name.vorname); dbms_output.put(' '|| my_name.nachname); dbms_output.put(' '); zeile := true; ELSE if zeile == TRUE THEN dbms_output.put(my_name.vorname); dbms_output.put(' '|| my_name.nachname); dbms_output.put_line(''); zeile := false; END LOOP CLOSE emp_cur; END ----------------------- END; Dabei sollte beim Aufruf der Prozdur folgende Ausgabe erscheinen: Max Mustermann Peter Bauer Michael Jürgens Jürgen Thaler ... Für ein paar hilfreiche Tipps, wäre ich Euch mit herzlichem Dank verbunden. lg, Blagi Bearbeitet 24. April 2009 von Blagi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 27. April 2009 Teilen Geschrieben 27. April 2009 Hi, in deinen Tabellen fehlt die Verknüpfung Lehrer zu Klasse, daher kannst Du nie einen Lehrer einer bestimmten Klasse zuordnen, wie Du es in der Aufgabenstellung beschrieben hast. Um den Cursor dynamisch zu gestalten, kannst Du einen Parameter verwenden: CURSOR emp_cur (classname VARCHAR2) [b]IS[/b] SELECT abc.vorname, abc.nachname FROM ( SELECT l_vorname vorname, l_name nachname FROM lehrer UNION SELECT s_vorname vorname, s_name nachname FROM schueler WHERE s_k_klasse= classname ) abc ORDER BY abc.nachname ASC; my_name abc%ROWTYPE; Ein Subselect ist kein Typ, davon kannst Du keinen Record anlegen, wenn, dann musst Du den Cursornamen dazu verwenden: my_name emp_cur%ROWTYPE; Geöffnet wird der Cursor dann wie folgt: OPEN emp_cur(p_klasse); Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.