Zum Inhalt springen

PL/SQL Procedure: Paramenterabhängiges UNION


Blagi

Empfohlene Beiträge

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 von Blagi
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...