Pl/sql

  • Hallo, ich habe folgende Aufgabenstellung bekommen und hoffe auf Ratschläge, wie ich bei der Programmierung vorgehen soll. Folgende Tabellen sind schon erstellt und ganz unten ist die Aufgabe dazu.


    -- Projekt: Schule - Schuljahresfähig machen
    -- Mitmannsgruber März 2010
    --
    -- Eine Tabelle "Schuljahr definieren
    create table schuljahr (
    sj_id int primary key,
    sj_bez varchar2(20),
    sj_StartDat date not null,
    sj_EndDat date not null);

    insert into schuljahr values(1, '2009/2010', '07-09-2009', '02-07-2010');
    insert into schuljahr values(2, '2010/2011', '06-09-2010', '01-07-2011');

    -- Defiinieren der SJKlassen schuljahresfähige Klassentabelle
    create table sjklassen (k_id, k_sj_id, k_s_klaspr, k_s_klasprstv, k_l_klavst, k_bez,
    primary key (k_id,k_sj_id))
    as
    select k_id,1,k_s_klaspr, k_s_klasprstv, k_l_klavst, k_bez
    from klassen;

    -- Definieren der SJSchueler - schuljahresfähige Schuelertabelle
    create table sjschueler(s_schnr primary key, s_name not null, s_vorname, s_adresse, s_gebdat,s_gender)
    as
    select s_schnr, s_name, s_vorname, s_adresse, s_gebdat, 'm'
    from schueler;

    update sjschueler set s_gender ='f'
    where s_vorname in ('Walli', 'Friederike','Barbara','Leopoldine','Maria','Claudia');

    -- Definieren der Tabelle SJschuelerklassen, wo steht, welcher Schueler
    -- in welchem Schuljahr in welcher Klasse ist
    -- da keine null-Werte im select erlaubt sind, wurde sysdate verwendet
    create table SJschuelerKlassen (sk_s_schnr, sk_sj_id, sk_k_id, sk_abDatum, sk_bisDatum,
    primary key(sk_s_schnr,sk_sj_id,sk_k_id))
    as
    select s_schnr, 1, s_k_klasse, sysdate,sysdate
    from schueler;
    -- Datums werden nachträglich null gesetzt
    update SJschuelerKlassen set sk_abDatum = null, sk_bisDatum = null;


    -- es ist eine Procedure zu schreiben, die aufgrund der 3 Eingabeparameter:
    -- Schuljahr, Klasse_alt und Klasse_neu
    -- die Schueler von Schuljahr und Klasse_alt in die neue Klasse:
    -- Schuljahr+1 und Klasse_neu aufsteigen lassen, sofern keine negativen
    -- vorliegen.

    Danke im Voraus!

  • Am besten machst dir ein Select Statement, dass dir alle Schueler sucht die geupdated werden müssen. Und setzt dann Positioned Updates ein.

    Wobei die Aufgabe auch gut in einem einzigen Update gelöst werden könnte denk ich.

  • Ich habe jetzt einfach begonnen eine Tabelle wechsel zu erstellen, die Schuljahr, klasse_neu und klasse_alt beinhaltet und ich nehme an ich muss noch weitere Tabellen wie Klasse_neu oder ist das anders gedacht? Irgendwo muss ich ja die Daten hineinschreiben.

  • Ich habe jetzt einfach begonnen eine Tabelle wechsel zu erstellen, die Schuljahr, klasse_neu und klasse_alt beinhaltet und ich nehme an ich muss noch weitere Tabellen wie Klasse_neu oder ist das anders gedacht? Irgendwo muss ich ja die Daten hineinschreiben.

    Hier kann ich dir nicht folgen, dass klingt einfach total sinnlos. Du willst eine Tabelle für die neue Klasse erstellen? Du hast doch schon eine Tabelle für die Klassen.


    Erstens: Die Namensgebung ist grauenhaft. Man erkennt kaum was gemeint ist.
    2tens. In der Tabelle SJschuelerklassen steht drin: Welcher Schüler, in Welchem Schuljahr in Welche Klasse geht. Wenn ich es richtig verstehe brauchst du sogar nur diese Tabelle. Du suchst dir alle raus die in @Schuljahr und @Klasse_alt liegen und verschiebst sie in der gleichen Tabelle ins nächste Schuljahr und Klasse.

    Einmal editiert, zuletzt von LordNecro (19. März 2010 um 00:05)

  • Also ich sehe auch ueberhaupt keinen Grund wieso Du dafuer PL/SQL bzw. eine Prozedur verwenden moechtest. Ein einfaches SELECT FROM - INSERT INTO SchuelerToKlasse statement mit einer simplen WHERE Abfrage muss da eigentlich genuegen.

    Und ja, die Namensgebung ist mehr als ungluecklich. Hat Dich jemand gezwungen die ganzen Prefixes in den Spaltennamen zu verwenden?! Das ist echt grausam.

    *** Make it idiot proof, and someone will build a better idiot. ***

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!