Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PL/SQL Procedure: Paramenterabhängiges UNION

Empfohlene Antworten

Veröffentlicht

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.