title image


Smiley Ora Trigger prüfen ob Datensatz insertiert werden kann wg PK verletzung
Hi Leute



Ich muss Vorgänge, die bestimmte Werte überschreiten seperat wegschreiben.



Ich habe einen Trigger indem nach einen Update auf Tabelle A

in Tabelle B ein Datensatz eingefügt werden soll oder upgedatet (bzw gelöscht und neu eingefügt wäre auch denkbar) werden soll oder nix pasieren soll.



In Tabelle B liegt auf Feld_1 und Feld_2 der Primärschlüssel.



Der Trigger fügt aber u.a die Feld_1 und Feld_2 (Vorgangsnummer und Vorgangsposition)

aus Tabelle A in Tabelle B ein.



Unter unglücklichen kann es jetzt passieren, das mein Trigger ein Insert auslöst, der zu einer Primärschlüsselverletzung führt.



Ich würde gerne prüfen, ob der Datensatz schon da ist und wollte mir dafür die Variable CNT definieren und einfach über eine Count(*) feststellen ob es den Datensatz gibt. Wenn das dann 0 ist, dann darf insertiert werden, wenn das 1 ist, muss upgedatet werden.



Aber das klappt iegendwie nicht mit meheren Feldern:



Codeschnippsel:

..Trigger after Update on Tabelle A

...



...

CNT INTEGER;



BEGIN

IF :NEW.B... bla bla THEN



SELECT COUNT(*) into CNT FROM Tabelle B GROUP BY FELD_1, FELD_2,

WHERE FELD_1 = :NEW.FELD_1 AND FELD_2= :NEW.FELD_2;

IF CNT = 0 THEN

--insertieren

INSERT INTO TABELLE

(FELD_1, FELD_2, ...)

VALUES

(:NEW.FELD_1, :NEW.FELD_2, ...)

END IF;

END IF;

END IF;
________________________________

"Per Anhalter durch die Galaxis":

Nach nur 7,5 Millionen Erdenjahren war das Rätsel gelöst. Deep Thought verkündete mit unsagbarer Erhabenheit und Ruhe: 42!!

Antworten auf zwar weitaus weniger bewegende Fragen bekommst hier deutlich schneller:

SQL-Tips das SQL-Wiki

Bis Denne Frank


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: