Sequencewert in Hostvaraiable: Aber wie?
- Dieses Thema hat 6 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 18 Jahre, 11 Monaten vonGast.
- AuthorPosts
- 17. Juni 2004 um 14:48 Uhr #2405
Hallo zusammen,
ich bräuchte mal eure Hilfe.
Ich verwende in Embedded-SQL bei einem Insert den Wert einer Sequence als Laufnummer. Diese Laufnummer wird zur weiteren Verwendung in der Application benötigt.
Kann mir jemand sagen ob, und wenn wie, es möglich wäre den eben eingefügten Wert in eine Hostvariable zur weiteren Verarbeitung zu übertragen.
Bei Oracle kann man das mit folgender Anweisung erreichen:
RETURNING [DB_FELD_NAME] INTO :HOSTVAR-NAMEGibt es dafür ein entprechendes Äquivalent bei DB2?
Vielen Dank im voraus
17. Juni 2004 um 16:39 Uhr #2888dazu gibt es die skalare Funktion IDENTITY_VAL_LOCAL ()
versuch einfach mal:
EXEC SQL SET :hostvar = IDENTITY_VAL_LOCAL() ;
18. Juni 2004 um 10:24 Uhr #3241Vielen Dank erst mal für die Antwort. Leider glaube ich aber, dass ich damit mein Problem nicht lösen kann (bzw. ist mir nicht klar wie das damit gehen soll).
Anbei ein kurzes Beisspiel was ich beabsichtige und wie es bei Oracle aussieht:
EXEC SQL
INSERT INTO KORDB.TS_TABLE_MAN
(
NUMMER
, LAND
, UHRZEIT
, WOCHENTAG
, TESTTEXT
, PLANTEXT
)
VALUES
(
TS_TABLE_MAN_SEQ.NEXTVAL
, :TS-TABLE-MAN-HOST.H-LAND
, :TS-TABLE-MAN-HOST.H-UHRZEIT
, :TS-TABLE-MAN-HOST.H-WOCHENTAG
, :TS-TABLE-MAN-HOST.H-TESTTEXT
, :TS-TABLE-MAN-HOST.H-PLANTEXT
)
RETURNING NUMMER INTO :TS-TABLE-MAN-HOST.H-NUMMER
END-EXECEntscheidend dabei ist, dass ich genau den Sequencewert aus dem erfolgten Insert Statement erhalte. Eine erneute Abfrage des Sequencewertes bringt mich nicht weiter, da parrallel noch andere Inserts erfolgen können.
18. Juni 2004 um 11:01 Uhr #3471Pardon, da hab ich sequences wohl mit IDENTITY verwechselt.
Bei IDENTITY funktioniert der IDENTITY_VAL_LOCAL()Mit den neuen V8- Features bin ich noch nicht so vertraut.
Aber das sollte doch funktionieren:
EXEC SQL SET :hostnextvalue = NEXT VALUE FOR sequence ;
INSERT INTO table ( col1, … )
VALUES (:hostnextvalues , … )18. Juni 2004 um 11:21 Uhr #3617Hallo,
mit V8 gibt es ein neues Konstrukt, nennt sich Select from Insert oder auch Insert within Select und löst genau dieses Problem (insbesondere auch Default-Columns, die auf Current Timestamp gesetzt werden, oder die über Trigger versorgt werden).
SELECT seq-col
FROM FINAL TABLE (<Insert-Statement>);seq-col soll hier die Column sein, die von DB2 versorgt wird.
Ciao, Rolf
18. Juni 2004 um 13:27 Uhr #3728in der Version 8 von DB2 for z/OS ?
hm, hab in der IBM-Literatur dazu nichts gefunden ???
21. Juni 2004 um 6:51 Uhr #3801Hi Ulrich,
ja, V8 für z/OS. Hier der Link zur What’s new-Broschüre (Seite 3):
pdf http://publib.boulder.ibm.com/epubs/pdf/dsnwnj10.pdf
bzw. als html http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnwnj10/2.1.1?DT=20040210142928
Und in der SQL-Reference:
html http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnsqj10/4.2.2.1?SHELF=&DT=20040216135741&CASE=
Irgendwie kann ich gerade nicht auf das pdf zugreifen, schau dir mal die SQL-Reference, Subselect, From-Clause an.
Link zur V8-Doku: http://www-306.ibm.com/software/data/db2/zos/v8books.html
Habs aber noch nicht probiert, deshalb unter Vorbehalt!
Viele Grüße
Rolf - AuthorPosts
You must be logged in to reply to this topic.