# trigger mit einem update einer table und insert einer anderen table



## Anis08 (1. April 2008)

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?


```
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


----------



## shutdown (1. April 2008)

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.


----------



## Anis08 (1. April 2008)

shutdown hat gesagt.:


> 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 '
> 
> ...



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.


----------



## shutdown (1. April 2008)

Und der Fehler wäre?


----------



## Anis08 (1. April 2008)

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


----------



## dbwizard (1. April 2008)

Anis08 hat gesagt.:


> Hi, sorry irgendwas mit meinem Kennwort stimmte nicht.
> Siehst du ein Fehler



- Ja : 147 2 PLS-00103: Fand das Symbol "\" 

Kannst du das komplette Script posten ?

Gruss


----------



## Anis08 (4. April 2008)

Hallo, 
kann zuzeit nichts senden. Ich muss wieder bei dem Entwurf etwas ändern, vielen Dank trotzdem. 

Vieleicht bis später


----------

