Domino 9 und frühere Versionen > Entwicklung

DATEN IN DB2 Schreiben

(1/3) > >>

Abdelhadi Doujali:
Hallo zusammen,

ich habe 2 Fragen:

1. Welchen Befehl benutzt man, um Notesdaten in einer Db2 Tabelle zu schreiben? Bsp. wäre besser.?
Bsp. Inhalt des Feldes Kundenname muss in der Spalte KName (Tabellenname=Kunden)

2. Wie kann ich auf den letzten Datensatz in einer DB2 Tabelle zugreifen?

Voraussetzung:
Ich habe Notes 5 und arbeite mit lsxlc.

Danke für eure Hilfe im Voraus.

Marinero Atlántico:
kann sein, dass ich das jetzt mit R6 durcheinanderbringe (ich bin ein großer Anhänger von Java für RDBMS Zugriffe).

Aber inserts sollten mit LCConnection.Insert und vermutlich auch mit LCConnection.execute möglich sein.
Was meinst du mit letzten Datensatz?
Geht es darum, dass dort eine IDentity (auto-increment)  als Primary Key ist und du benötigst diesen von der Datenbank generierten key?
Wenn es das ist, bitte melden.
Dafür gibt es in DB2 seit R7 eine Funktion, die aber auch ein wenig haarig ist, falls viele inserts gleichzeitig stattfinden.

 

Abdelhadi Doujali:
danke erstmal für deine Antwort.

zu 1. ich habe es mit insert versucht und klappt auch.
zu 2. Nein, vielleicht anhand dieses Bsp wird es deutlich:
in der DB2 Tabelle Kunden habe ich zum Bsp. diese 4 Datensätze:
Datensatz1
Datensatz2
Datensatz3
Datensatz4
Dann will ich aus dem Vierten bzw. letzten Datensatz in diesem Bsp den Inhalt des Feldes Nummer auslesen. Zum Bsp wenn das Ergebnis des Auslesen aus Db2 Nummer = 400 ist,
dann schreibe neuer Datensatz->Nummer+1 dh. 400+1 unsw.

Ich hoffe, dass es jetzt etwas deutlicher geworden.


Marinero Atlántico:
hm. Bin hier ohne meine recht umfangreiche DB2 Doku. Keine Gewähr für Korrektheit.

Sehe grundsätzlich 2 Möglichkeiten:
1. Du schreibst vor dem Insert ein Select der Art (so ähnlich)

--- Code: ---Select Nummer From Kunden order by Desc Nummer

--- Ende Code ---

Der erste Datensatz ist dann der mit der höchsten Nummer. Es gibt da auch ein FETCH Schlüsselwort, wo man sich nicht das gesamte Resultset zieht, wenn man nur das erste Tupel braucht.
Problem ist, dass zwischen Select und Insert jemand anders in die Tabelle geschrieben haben kann.
Du kannst dich davor schützen, indem du das Transaktions-Isolations Level der Connection auf Serializable setzt. Das ist aber nicht so gut oder besser gesagt sehr schlecht für die Performance.

DB2 hat aber seit ca. Version 7 ein Feature, dass Nummern automatisch hochzählt.
In DDL sieht das ungefähr so aus (für die Spalte):

--- Code: ---Nummer BigInt as Identity (+kryptische Starts with increment by cache Syntax),

--- Ende Code ---
Diese column dann im insert nie berücksichtigen.
Also in Tabelle Kunde mit Spalten Nummer und Name:

--- Code: ---Insert Into Kunde (Name) Values ("der Name");

--- Ende Code ---
Die Nummer wird automatisch gesetzt.

Für dein anderes Problem: Bekommst du irgendwelche DB2 - Fehlermeldungen zurück. Wenn man die entsprechende Dokumentation hat, kann man mit den 5-stelligen error-codes ganz gut arbeiten.

Axel

Abdelhadi Doujali:
Ich werde meinen Glück versuchen.
Danke und Gruß
Abdelhadi

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln