Trigger /Stored Procedur

Dolphon

Erfahrenes Mitglied
Hi,

ich soll einen Trigger und einen Stored Procedur schreiben.
Folgende Tabellenstruktur ist gegeben:

PHP:
create table studenten 
( 
 Matrikelnummer varchar(10), 
 Studiendauer number(2), 
 primary key (Matrikelnummer) 
);

Trigger
EInen Trigger schreiben, der beim Einfügen eines Datensatzes eine Meldung bringt, wenn der Student die Regelzeit (Studiendauer >8) überschreitet. Wenn ja, dann soll dieser STudent in die Tabelle Regelzeit_Uberschritten eingefügt werden.

Hier meine Trigger. KA ob dieser so richtig wäre. (Keine Möglichkeit zum testen.
PHP:
CREATE OR REPLACE TRIGGER Student_Regelzeit_ueberschritten
BEFORE INSERT OF Martikelnummer,Studiendauer, ON studenten
FOR EACH ROW
WHEN (Studiendauer > 8)
BEGIN
	Insert INTO Regelzeit_Uberschritten values ('Martikelnummer','Studiendauer');
    dbms_output.put_line('Dieser STudent hat die Regelzeit überschritten!'

END;

Stored Procedur

Erstellen Sie eine Prozedur mit 2 Parameter, um Daten in die Tabele Studenten einzufügen.

Mein Code Mit einer Lücke nach den IS:

PHP:
AUFRUF MIT EXEC studenten_hinzufuegen( Par_Martikelnummer, Par_Studiendauer)

CREATE PROCEDURE studenten_hinzufuegen (Par_Martikelnummer IN integer, Par_Studiendauer IN number(2))
IS
  xxxxxxxxx
BEGIN
  INSERT INTO studenten values (Par_Martikelnummer,Par_Studiendauer);
  dbms_output.put_line('Student hinzugefügt');
END;
 
Moin Dolphon,

falls deine Frage noch aktuell sein sollte..

Zu dem Trigger, wo du ja schreibst "Hier meine Trigger. KA ob dieser so richtig wäre. (Keine Möglichkeit zum testen."
--> Da bist du uns gegenüber noch im Vorteil.
Wir wissen nicht mal, welche Datenbank denn diesen Trigger feuern soll.

Egal welche es sein mag, es wäre hilfreich, wenn du dich mit dir vorab einigen könntest, ob das Feld Matrikelnummer nun "Matrikelnummer" oder "Martikelnummer" heißen soll und ob es nun ein VARCHAR-Feld ist wir in der TABLE angegeben oder ein INTEGER-Feld wie ein der StP.

Falls das Ganze unter Oracle fliegen sollte, wäre es zusätzlich sinnvoll, alle öffnenden Klammern zu schliessen und Einzel-Befehle jeweils mit ";" enden zu lassen

Der Trigger könnte in diesem Fall z.B. so tatsächlich feuern:
SQL:
CREATE OR REPLACE TRIGGER REGELZEITLIMIT
BEFORE INSERT
ON STUDENTEN 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF  (:NEW.Studiendauer > 8) THEN
    INSERT INTO REGELZEIT_UBERSCHRITTEN( Matrikelnummer,Studiendauer)
	VALUES (:NEW.Matrikelnummer, :NEW.Studiendauer);
    dbms_output.put_line('Dieser Student hat die Regelzeit überschritten!');
	END IF 	;
END RegelzeitLimit;
.... wobei das ganze natürlich nur halb sinnvoll ist, denn ein UPDATE des STUDENTEN-Satzes würde eben weder zu einem neuen Datensatz in der REGELZEIT_UEBERSCHRITTEN führen (falls Dauer >8) noch zu einem Löschen einen Datensatzes ebendort, falls mal ein Tippfehler in der STUDENTEN-Tabelle (von Dauer 10 auf Dauer 1) korrigiert wird.

Ebenso wird NICHT abgefangen, dass ja auch die REGELZEIT_UEBERSCHRITTEN einen PK haben könnte, der sich evtl weigert, eine neue Matrikelnummer nochmals einzufügen (was natürlich passieren kann ).

Die StP sollte zusätzlich wenigstens auf eine "Exception" reagieren -> da misch ich mich aber beim bisherigen Stand deines Ansatzes nicht ein und empfehle mal das Befragen einer Suchmaschine.

Ist das denn eine Hausaufgabe und wenn ja: hat denn der Lehrer Gar nichts vorher zu Triggern und StPs erzählt?

Grüße
Biber
 

Neue Beiträge

Zurück