PDA

View Full Version : Trigger und Ladethematik



HPKahn
23-02-05, 07:31
Guten Morgen Forum,

als DB2 bzw. iSeries anfänger stellen sich mir mehrere Fragen

1. Wie kann ich in einem Before-Insert-Trigger einen künstlichen Primary Key erzeugen(Sequenz habe ich erstellt weiß aber nicht wie ich den Wert ermitteln kann, bei Oracle geht's so, Select SeqName.nextval into VarName from dual, funktioniert aber hier nicht. anschließend im Trigger :NEW.PK_feld := VarName)

2. Wie kann ich Textdateien in eine Tabelle laden(ähnlich Oracle SQL-Loader)?

Wie ihr hier sicher bemerkt werden alle Ora-DB's auf DB2 migriert.
Vielen Dank im voraus für eure Hilfe

Glück auf

HP Kahn

BenderD
23-02-05, 08:21
Hallo,

ad 1: before insert Trigger dürfen auf DB2 keinen SQL update machen, das wird wohl einen work around brauchen:
entweder external Trigger, oder Auto increment Felder (wie heißt der Typ gleich nochmal - identity?), oder im After insert Trigger machen, aber dann brauchts auch noch eine SQL Function und vom Transaktions Handling ist das eher kritisch.

ad2: CPYFRMIMPF kann sowas ähnliches, wenn es denn überhaupt korrekt funktioniert, was nur bei ausgesuchten Patch Ständen zu stimmen scheint.

mfg

Dieter Bender


Guten Morgen Forum,

als DB2 bzw. iSeries anfänger stellen sich mir mehrere Fragen

1. Wie kann ich in einem Before-Insert-Trigger einen künstlichen Primary Key erzeugen(Sequenz habe ich erstellt weiß aber nicht wie ich den Wert ermitteln kann, bei Oracle geht's so, Select SeqName.nextval into VarName from dual, funktioniert aber hier nicht. anschließend im Trigger :NEW.PK_feld := VarName)

2. Wie kann ich Textdateien in eine Tabelle laden(ähnlich Oracle SQL-Loader)?

Wie ihr hier sicher bemerkt werden alle Ora-DB's auf DB2 migriert.
Vielen Dank im voraus für eure Hilfe

Glück auf

HP Kahn

B.Hauser
23-02-05, 09:31
Hallo,

die SEQUENCE kann direkt beim Insert-Statement angegeben und eingefügt werden.
Es ist kein Trigger notwendig.

Beispiel:


CREATE SEQUENCE MySequence
START WITH 10 INCREMENT BY 10




INSERT INTO MyTrgTable(MySeq, Col2)
VALUES(NEXT VALUE FOR MySequence, 123 )


Ebenso müsste ein SET-Statement in einem SQL-Before Insert Trigger funktionnieren.


Create Trigger MYSchema.MyTrgTable01
Before Insert on MyTrgTable
Referencing NEW ROW as Ins
For Each Row
Mode DB2ROW
BEGIN Atomic
set Ins.MySeq = NEXT VALUE FOR MySequence;
END;


Leider kann ich es nicht ausprobieren, da ich im Moment keinen Zugriff auf eine Maschine mit Release V5R3M0 habe.