trigger mit einem update einer table und insert einer anderen table

Anis08

Grünschnabel
Hallo zusammen, ich bin das erstemal hier im Forum und gespannt wie es weitergeht. Mein trigger macht nicht das was er soll...
Ich habe eine Tabelle(Menge) Abschlussarbeiten und drei Tabellen(disjunkte Mengen), die in reserviert,laufend und abgegeben unterteilt.
Ich kann in der Tabelle reserviert nur einfügen, wenn der Status = `frei` UND die Zuordnung = NULL ist.
Das gleiche gilt auch für die Tabelle laufend
......Status ='belegt' UND Zuordnung = 'reserviert'

...ich war oft auf dieser Seite und habe einige Tipps gut nutzen können aber hier sitze ich schon 24 std dran ich komme einfach nicht weiter.

Der Trigger bewirkt nicht das was es soll. Könnt ihr mir da helfen?

SQL:
 CREATE OR REPLACE TRIGGER aft_reserviert_tr
 After  INSERT ON  abschlarbreserviert
 FOR EACH ROW
 DECLARE
 excep_bereits_belegt EXCEPTION;
 akt_status abschlussarbeit.abschlarbstatus%TYPE;
 CURSOR get_status IS SELECT a.abschlarbstatus FROM abschlussarbeit a WHERE :NEW.abschlarb_id=a.abschlarb_id ;
BEGIN
    OPEN get_status;
    FETCH get_status INTO akt_status;
   IF (akt_status='frei')THEN 
 UPDATE abschlussarbeit SET abschlussarbeit.abschlarbzuordnung = 'reserviert' ,
                    abschlussarbeit.abschlarbstatus= 'belegt'
  WHERE :NEW.abschlarb_id = abschlussarbeit.abschlarb_id  ;
  Else
  THEN RAISE excep_bereits_belegt;

  END IF;
  CLOSE get_status;
  EXCEPTION  WHEN excep_bereits_belegt THEN Dbms_Output.put_line('diese Abschlussarbeit ist bereits reserviert');

 END;
habe es geändert, aber klappt trotzdem nicht!
Aber sieht trotzdem schon besser aus:-)
 
Zuletzt bearbeitet:
Zuerst einmal willkommen im Forum - wir sind hier kein Chat :-)
Dann als nächstes - es gibt hier verschiedene Tags, mit denen Code besser dargestellt wird (zu erreichen über die Leiste oben, oder über direkte eingabe).
Zum Beispiel ['sql']ajldfjaölsdfj['/sql'] ohne die '

Nun zu deiner Frage:

Du möchtest verhindern, dass Zeilen eingefügt werden.
-> Warum machst du dann einen After-Insert-Trigger? Da ist die Zeile doch schon angelegt!
Was du brauchst ist ein before-Insert-Trigger.
 
Zuerst einmal willkommen im Forum - wir sind hier kein Chat :-)
Dann als nächstes - es gibt hier verschiedene Tags, mit denen Code besser dargestellt wird (zu erreichen über die Leiste oben, oder über direkte eingabe).
Zum Beispiel ['sql']ajldfjaölsdfj['/sql'] ohne die '

Nun zu deiner Frage:

Du möchtest verhindern, dass Zeilen eingefügt werden.
-> Warum machst du dann einen After-Insert-Trigger? Da ist die Zeile doch schon angelegt!
Was du brauchst ist ein before-Insert-Trigger.

Ja ich habe diesen Trigger als Beispiel gesendet. Versucht habe ich es auch mit dem Before-Insert-trigger. Aber da funktionierte überhaupt nichts mehr und der Fehler wird nicht angezeigt.
 
Hi, sorry irgendwas mit meinem Kennwort stimmte nicht. Musste also mind. 30 min warten bis ich mich wieder einloogen durfte. Ja, es gibt kein Fehler zu sehen.
Line Pos Text
125 Create trigger, executed in 3.031 sec.
147 2 PLS-00103: Fand das Symbol "\"
Total execution time 4.75 sec.
Siehst du ein Fehler
 
Hallo,
kann zuzeit nichts senden. Ich muss wieder bei dem Entwurf etwas ändern, vielen Dank trotzdem.

Vieleicht bis später
 
Zurück