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