Domino 9 und frühere Versionen > Entwicklung
DATEN IN DB2 Schreiben
Marinero Atlántico:
DB2 ist eigentlich gar nicht so schlecht.
Man braucht nur einfach einen Sack von Dokumentation, um das einigermassen in den Griff zu bekommen sowie eine einigermassen gute Beziehung zu wirklich professionellen RDBMS Admins für komplexere Produktivdatenbanken (zumal DB2 oft auf Hosts laufen).
Die Bücher von IBM Press sind ganz ok.
Sehr hilfreich ist für mich ein Sack von PDF Dateien, die - glaub ich - bei DB2 7 dabeiwaren und sich seitdem auf meinem zuHause-Standalone Rechner liegen. Falls ich noch eine leere CD hab, kann ich die brennen und dir schicken (hab sie auf den Redbooks-Seiten nicht gefunden).
Bedenkenswert sind btw. auch stored procedures. Die können dann von dem LSX-Code aufgerufen werden.
Axel
Marinero Atlántico:
DDL-Beispiel einer Relation mit Identity-Spalte :
--- Code: ---CREATE TABLE USERNAME (
ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE ),
nameUSER VARCHAR(20),
pwd VARCHAR(20),
email VARCHAR(30),
MONEY DECIMAL(10,2),
PositionUSER BigInt
);
ALTER TABLE USERNAME ADD CONSTRAINT "PKEY_USER" PRIMARY KEY ("ID");
CREATE UNIQUE INDEX "index_User_Name" ON USERNAME (nameUSER);
--- Ende Code ---
Zugriffbeispiel (ok ist in ibatis sqlmaps, kann aber leicht auf andere RDBMS-Frameworks transferiert werden:
--- Code: ---INSERT INTO
UserName (nameUser, pwd, email, money, positionUser) Values
(#nameUser#, #pwd#,#email#, #money#, #position#)
--- Ende Code ---
Wichtig ist die Spaltennamen explizit zu benennen. Die Identity column (hier: ID) hier nicht setzen. Das wird automatisch von DB2 erledigt.
Oft braucht man im Skript die von DB2 generierte ID unmittelbar nach dem insert. Falls es neben der ID Spalte einen eindeutigen "natürlichen " key (im Beispiel nameUser) gibt, kann man ein Select versuchen.
Das ist nicht besonders performant.
DB2 kennt ausserdem die proprietäre Funktion Values(identity_val_local()), womit man die zuletzt eingefügte ID bekommt. Noch nicht zu Ende gedacht, aber diese Funktion unterliegt möglicherweise concurrency Problemen (gleichzeitiges einfügen von Datnesätzen). In dem Framework, mit dem ich z.Zt. mit DB2 arbeite (ibatis sqlmaps), scheinen automatisch irgendwelche Transaktionen gesetzt zu werden, die das möglicherweise absichern. Werd mir das nochmal genauer anschauen.
Ein Identity oder autoIncrement sowie eine Funktion, um den letzten Wert zu ermitteln, gibt es in praktischen allen Rdbms (inklusive open source wie mySql und Hypersonic). Nur ist das nicht nicht standardisiert und läuft überall ein bischen anders.
Wenn du eine email an axel dot janssen at gmail dot com schickst, kann ich dir ein paar sinnvolle redbooks schicken (zu db2 vs.7, aber ich arbeite auch mit 8 mit denen).
Z.B. braucht man imho eine Übersicht der errorcodes und -states bei solchen Meldungen:
--- Code: ---ause: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1;DB2ADMIN.USERNAME
--- Ende Code ---
Abdelhadi Doujali:
Hi,
ich habe dir eine Email wg. db2 reedboks geschickt.
Zugriff auf letzten Datensatz->Ich habe vergessen zu sagen, dass ich gar keinen Einfluß auf die db2Tabelle habe. Sie existiert bereits beim Kunden und enthält Daten.
Ich muss nur Datensätze in die Tabelle schreiben.
Wie du ja gesagt hast, in DB2 kann man einer Spalte sagen, dass sich der Wert automatisch um 1 erhöht (Identity->Increment) beim Einfügen eines neuen Datensatzes. Wenn der Kunde so was schön hat, dann brauche ich notesseitig gar nicht zu machen. Deswegen muss erstmal den Kunden fragen wie sie ihre Laufende Nr. generieren.
Gruß
Abdelhadi
Marinero Atlántico:
Ein paar gute Tipps im Umgang mit Datenbankadministratoren:
Frage den Datenbankadmin nach der DDL ALLER Tabellen auf die du zugreifst.
DDL heisst Database Definition Language.
Du kannst das ja ein bischen verändern und hier posten, wenn dir das ddl nicht klar ist.
Falls DB2 > 6 ist es auf jeden Fall besser diese hochzählende Nummer über DB2 zu generieren.
Man kann dann eine extra Tabelle in DB2 einfügen, die nur die Nummer hochzählt.
Hab heute die redbooks nicht dabei und schicke sie dir morgen.
Driri:
/offtopic :
@Abdelhadi :
Ich hätte eine Bitte, mach bitte aus deinen Threads keine Umfragen, wenn es keine seien sollen. Ist mir jetzt schon nen paar mal aufgefallen.
Vielen Dank :)
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln