PDA

View Full Version : SQL-Trigger im Navigator erstellen



cono2000
28-03-11, 14:39
Hallo zusammen,
ich habe bereits den ganzen Tag gesucht aber nicht die richtige Antwort gefunden.

Ich habe bereits Trigger in Verbindung mit RPG eingesetzt. Das Thema ist mir also nicht vollkommen fremd.

Nun versuche ich über den iSeriesNavigator einen SQL-Trigger zu erstellen der nach jeglicher Änderung die Daten von der DB2-Datei in einer SQL-Tabelle kopiert. Beide Dateien haben den gleichen Satzaufbau. Nun komme ich nicht weiter da es offensichtlich an SQL-Erfahrung mangelt.

Wie bekomme ich diesen einen Datensatz per SQL von Tabelle a nach tabelle B?

Danke für eure Hilfe

Fuerchau
28-03-11, 14:56
Mittels einer klassischen Insert-Anweisung:

insert into mytable (f1, f2, ...)
values(before.f1, before.f2, ...)

before = Prefix für dein Before-Immage.

cono2000
28-03-11, 16:04
Mittels einer klassischen Insert-Anweisung:

insert into mytable (f1, f2, ...)
values(before.f1, before.f2, ...)

before = Prefix für dein Before-Immage.

Danke.

Das mit dem Insert klappt.
INSERT INTO LABORDA . LAUKO1SQ ( LKFIRM , LKAUFT )

Aber die Values Zuweisung bekomme ich nicht hin.
values(LAUKOTSTPF.LKFIRM, LAUKOTSTPF.LKAUFT)
Fehlermeldung:
Nachricht: [SQL0312] Variable LKFIRM nicht definiert oder nicht verwendbar.

Eines ist sicher: In der Datei LAUKOTSTPF befinden sich das Feld LKFIRM

Muss ich vorher noch mit einer Select-Anweisung den letzten hinzugefügten Datensatz ermitteln?

B.Hauser
28-03-11, 16:41
Poste mal den SQL Code von Deinem Trigger (vor allem den Part mit Referencing OLD/NEW Row as).

Der Correlation-Name, der hinter as angegeben wird muss bei der Qualifizierung der Values-Werte verwendet werden (und nicht der Datei-Name!).

Wenn beide Tabellen tatsächlich den gleichen Aufbau, die gleichen Feld-Namen in der gleichen Reihenfolge haben, kannst Du auch mal die folgende Syntax ausprobieren :


Insert Into NewFile 1 Rows Values(Old.*);

... ist nicht getestet und könnte deshalb auch schief gehen!

Birgitta

cono2000
29-03-11, 09:31
Herzlichen Dank.:)

Es hat jetzt funktioniert.
Ich hatte im iNav keinen Eintrag in "Korrelationsname für neue Zeile" angegeben.
Hier der generierte SQL-String:

/* SQL-Auslöser LABORDA.LAUKO1 wird erstellt */
CREATE TRIGGER LABORDA.LAUKO1 AFTER INSERT ON LABORDA.LAUKO1PF REFERENCING NEW a FOR EACH ROW BEGIN ATOMIC

INSERT INTO LABORDA . LAUKO1SQ
(LKFIRM,
LKAUFT,
...
LKUSER,
LKSTAT)

VALUES
(A . LKFIRM,
A . LKAUFT,
...
A . LKUSER ,
A . LKSTAT ) ;

END;