Stored Procedures und Triggers[gelöst]



  • Hi,

    soll für das Datenbank-Praktikum an der Hochschule
    Stored Procedures und Trigger für eine Datenbank entwerfen,
    aber irgendwie komme ich nicht weiter. In der Vorlesung hab
    ich gedacht ich hätte es verstanden, aber jetzt sitz ich vor
    der Aufgabe und weiß irgendwie garnicht wie ich anfangen soll
    und die erklärung in unserem Skript ist auch nicht wirklich
    hilfreich.

    Wär toll wenn einer von euch mal über die Aufgabe drüber schauen
    könnte und mir eine kleine Starthilfe geben könnte wie ich das am
    Besten angehe. In der Vorlesung hatten wir immer nur Beispiele mit
    einer Tabelle und hier sind es jetzt mehrere und ich weiß nicht
    ob ich die jetzt über einen JOIN zusammen packen sollte oder ob
    es vielleicht auch anders funktioniert, keine Ahnung steht grad
    irgendwie auf dem Schlauch und komm nicht weiter.

    Das Aufgabenblatt gibt es hier:
    http://www.fbi.h-da.de/fileadmin/personal/u.stoerl/DBII-SS08/Praktikum/db2Prak2.pdf
    Ist der Teil 2, bei dem ich nicht weiter komme.

    P.S.: Bitte nicht denken das ich jetzt von euch die Aufgaben gelöst
    haben will, ein kleines Beispiel wie sowas funktioniert würde mir
    schon vollkommen reichen.

    gruß smilingman



  • Und was möchtest Du da Wissen?

    Was eine Stored Procedure ist?
    Was ein Trigger ist?

    Einfach erklärt:

    Trigger:
    Wird aufgerufen wenn eine Änderung in einer Tabelle erfolgt.
    Hier kann auf DELETE,INSERT,UPDATE reagiert werden.
    Mann bekommt dann im Trigger die Eingetragenen bzw. wenn der Trigger vor dem Eintragen erfolgt die möglicherweise eingetragenen oder geänderten Daten.

    Stored Procedure:
    Im Grunde eine Funktion in der Datenbank welche auch Parameter entgegennimmt und/oder zurückgegebn kann.
    Wie eine Funktion in einem Programm nur eben mit SQL-Anweisungen.



  • Hi Unix Tom,

    erstmal danke für deine Antwort, aber was eine Stored Procedure
    und ein Trigger ist wusste ich schon. Mir ging es mehr um den
    richtigen Aufbau der Stored Procedure wenn man mehrere Tabellen
    hat. Benutzt man dann einen JOIN oder doch lieber mehrere
    CURSOR?

    Also die Stored Procedure für Aufgabe 2 aus Teil 2 die ich mir
    gestern noch schnell zumsammen gebastelt habe sieht so aus:

    CREATE OR REPLACE PROCEDURE addFSTD(PERSNR IN NUMBER, FBEZ IN VARCHAR2)
    IS
    CURSOR CurPilot IS
       SELECT * 
       FROM pilot
       NATURAL JOIN flug
       NATURAL JOIN abflug
       FOR UPDATE OF F_STD;
       PilotRecord CurPilot%rowtype;
    BEGIN
       FOR PilotRecord IN CurPilot LOOP
          IF PilotRecord.PER_NR = PERNR AND PilotRecord.F_BEZ = FBEZ THEN
             UPDATE pilot
             SET F_STD = F_STD + ZEIT
             WHERE CURRENT OF CurPilot
          ELSE
             dbms_output.put_line("PersonalNr oder Flugbezeichnung wurde nicht gefunden");
          END IF;
       END LOOP;
    END;
    

    Bin nur nicht so sicher ob das mit den JOIN's so schön ist und ob sie
    so funktioniert wie sie soll konnte ich leider auch noch nicht testen,
    aber das werd ich ja nachher im Praktikum sehen.

    smilingman



  • Welche SQL-Querys Du dort machst bleibt dir überlassen.
    Du kannst eigentlich sogar über Domaingrenzen hinweg schreiben.
    Zumindest beim MSSQL.

    Wie der Aufbau ist kommt auch auf das RDBMS an.
    MSSQL 2005 sieht sicher anderes aus als Oracle.



  • Willst Du nicht im Select-Stmt gleich den richtigen Satz selektieren?
    WHERE PER_NR=:PERSNR AND F_BEZ=:FBEZ ?
    (Habe die ORA PL/SQL-Syntax nicht mehr im Kopf.) Denn sonst wird ja die Fehlermeldung für jede unerwünschte Flug/Pilotkombination ausgegeben.



  • Ok, habs jetzt hinbekommen, war im grunde viel einfacher als ich dachte.
    Hätte gar keinen Cursor gebraucht.

    meine Lösung sieht jetzt so:

    create or replace
    PROCEDURE addFSTD(PERSNR IN NUMBER, FBEZ IN VARCHAR2)
    IS
      zeit number(5,2) := 0;
    BEGIN
       SELECT ZEIT INTO zeit
       FROM flug
       WHERE F_BEZ = FBEZ;
    
       UPDATE pilot
       SET P_STD = P_STD + zeit
       WHERE PER_NR = PERSNR;
    END;
    

    Nochmal vielen Dank für die Hilfe.

    smilingman


Anmelden zum Antworten