Trigger Auslöser
- Dieses Thema hat 7 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre, 1 Monat von
Anonym.
-
AuthorPosts
-
7. August 2006 um 10:21 Uhr #2713
AnonymInaktivHallo,
ich versuche folgendes:
http://www.imgloading.com/image.php?file=757811337
Dies ist mein Trigger, aber funtkioniert nicht richtig, es liegt anscheinend an der Select Anweisung in den VALUES(), hat einer von euch ne Idee warum das nicht funktioniert oder wie man es anders lösen kann. …Danke im Voraus. :question
7. August 2006 um 12:40 Uhr #3109
AnonymInaktivHallo first_andre,
SELECT innerhalb eine VALUES Klausel geht nicht,
aber vielleicht klappt ja folgendes:[…]
INSERT INTO TAFO ( AFO , SPEICHERTS , LOS , ART )
SE LECT DISTINCT ‚0100‘ , CURRENT TIMESTAMP , ‚los‘ , ART FROM TAFO WHERE
[…]( natürlich kein blanc lassen zwischen SE und LECT, aber wenn ich’s zusammen schreibe, dann gibts einen internen Verabeitungsfehler )
7. August 2006 um 13:07 Uhr #3388
AnonymInaktivDanke für die schnelle antwort, ich werds gleich mal ausprobieren.
Das mit den SE LECT ist mir auch schon aufgefallen, deshalb die UMSTÄNDLICH Variante mit dem Bild…schöne grüße an die
Admins, das Problem wird doch zu lösen sein, gerade in solch einem Forum???
egal!was bedeutet das distinct genau?
7. August 2006 um 14:50 Uhr #3562
AnonymInaktivHallo,
also das funktioniert schon ganz gut, obwohl ich über dieses komische "begin atomic" und END drüber gestopperlt bin.
Was bedeutet das denn eigentlich? Ich habs einfach mal weggelassen.Nun aber die nächste schwierigkeit, ich hab zweifelder die ich aus einer SE LECT Anweisung einfügen möchte, das klappt anscheinend noch nicht so…hier die problematik in code form, SE LECT dabei natürlich zusammengeschrieben.
geht:
IN SERT INTO TEST (int,timestamp,char6)
SE LECT DISTINCT 56,current timestamp,char6 FROM WHERE int=56 GROUP BY char6;geht nicht:
IN SERT INTO TEST (timestamp,char6,int)
SE LECT DISTINCT current timestamp,char6 FROM TEST WHERE int=56 GROUP BY char6, int FROM TEST WHERE int=56 GROUP BY int;Was haltet Ihr davon?
Nochmal das Ausgangsproblem:
Ich möchte mittels Trigger nen Eintrag in ne Tabelle machen, dabei mir 2 der erforderlichen VALUES aus diese Tabelle ziehen.Danke, mfg André!
8. August 2006 um 10:23 Uhr #3686
AnonymInaktivDISTINCT eliminiert doppelte Zeilen.
Ich vermute mal, es ist das, was Du mit dem GROUP BY zu erreichen versuchstBEGIN ATOMIC  … END   brauchst Du nur, wenn Du mehr als ein SQL-Statement im Trigger ausführen willst.
Nach einem INSERT kannst Du nur ein SE LECT – Statement angeben, Du kannst jedoch dabei auf mehrere Tabellen zugreifen .
Um z.B. zwei völlig unabhängige Werte aus zwei Tabellen zu ermitteln könntest Du als SE LECT kodieren:
IN SERT INTO TEST (timestamp,char6,int)
SE LECT Â current timestamp, max(feld1) ,max(feld2) Â FROM (
SE LECT char6 as feld1 , nullif(1,1) as feld2 FROM TEST WHERE int=56 GROUP BY char6
UNION ALL
SE LECT nullif(‚A‘,’A‘) as feld1 , int  as feld2  FROM TEST WHERE int=56 GROUP BY int  ) A  ;8. August 2006 um 11:04 Uhr #3774
AnonymInaktivHallo Ulrich,
das hat mir schon sehr weitergeholfen. Ich konnte meinen Trigger jetzt schon mit den 2
VALUES der Tabelle füllen. Das mit Distinct ist auch sehr hilfreich und spart wahrscheinlich auch
etwas performance als group by. Atomic und End hab ich auch verstanden, jedoch brauch ich sie
anscheinend noch nicht in diesem Trigger.
Eine andere Problematik die mich jetzt beschäftigt ist das wörtchen "when" in meiner Triggerfunktion.
Ich habs aus irgendeinem Forum aufgeschnappt und bin der Meinung es bestimmt in welchem Fall mein Trigger loslaufen soll sozusagen. Hier der Code dazu:CREATE TRIGGER TESTINSERT AFTER INSERT ON TEST REFERENCING NEW AS neu FOR EACH ROW MODE DB2SQL
WHEN ( (Se lect distinct akt FROM TABELLE where UPPER(status) like ‚S%‘)<>’Y‘)
INSERT INTO ….hier gehts dann mit dem gelösten problem weiter.Hab ich das so richtig verstanden? oder bezieht sich das when nur auf den zeitpunkt "when" der trigger erstellt wird?
Wenn ja, sollte ich dann lieber nach "INSERT INTO" mit ner where clausel weitermachen?mfg, André
8. August 2006 um 11:31 Uhr #3832
AnonymInaktivRichtig, das WHEN ( bedingung ) bestimmt, ob der Trigger auch wirklich "feuert",
d.h. das triggered sql statement wird nur ausgeführt, wenn die Bedingung zu dem Zeitpunkt wahr ist, zu dem der Trigger ausgelöst wird.
8. August 2006 um 12:45 Uhr #3867
AnonymInaktivund das für jede row die eingefügt wird. ….da hab ich ja jede menge gelernt. Der Trigger funktioniert jetzt einwandfrei.
Leider konnte mir noch keiner in richtung bacth file und das schließen des aufgerufenen db2 cmdlines weiterhelfen, aber
diesen thread hier kann ich gut und mit vielen dank an euch, für geschlossen erklären!DA NKE
-
AuthorPosts
You must be logged in to reply to this topic.