Umfrage

Wie kann ich Notesdaten in DB2 schreiben?

1
1 (50%)
2
1 (50%)

Stimmen insgesamt: 2

Autor Thema: DATEN IN DB2 Schreiben  (Gelesen 8659 mal)

Offline Abdelhadi Doujali

  • Frischling
  • *
  • Beiträge: 22
  • Ich liebe dieses Forum!
DATEN IN DB2 Schreiben
« am: 29.03.05 - 12:50:53 »
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

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #1 am: 29.03.05 - 13:51:13 »
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.

 

Offline Abdelhadi Doujali

  • Frischling
  • *
  • Beiträge: 22
  • Ich liebe dieses Forum!
Re: DATEN IN DB2 Schreiben
« Antwort #2 am: 29.03.05 - 14:16:15 »
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

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #3 am: 29.03.05 - 14:42:54 »
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 

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),
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");
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

Offline Abdelhadi Doujali

  • Frischling
  • *
  • Beiträge: 22
  • Ich liebe dieses Forum!
Re: DATEN IN DB2 Schreiben
« Antwort #4 am: 29.03.05 - 15:22:35 »
Ich werde meinen Glück versuchen.
Danke und Gruß
Abdelhadi

Marinero Atlántico

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #5 am: 29.03.05 - 17:41:20 »
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

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #6 am: 30.03.05 - 09:45:00 »
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);

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#)
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 


Offline Abdelhadi Doujali

  • Frischling
  • *
  • Beiträge: 22
  • Ich liebe dieses Forum!
Re: DATEN IN DB2 Schreiben
« Antwort #7 am: 31.03.05 - 11:50:00 »
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

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #8 am: 31.03.05 - 12:34:57 »
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

  • Gast
Re: DATEN IN DB2 Schreiben
« Antwort #9 am: 31.03.05 - 13:06:36 »
/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  :)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: DATEN IN DB2 Schreiben
« Antwort #10 am: 31.03.05 - 13:10:21 »
Ja, dazu verwendest Du bitte den zweiten Button von rechts und nicht den ganz rechts ..... wir sind Dir alle dafür dankbar
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Abdelhadi Doujali

  • Frischling
  • *
  • Beiträge: 22
  • Ich liebe dieses Forum!
Re: DATEN IN DB2 Schreiben
« Antwort #11 am: 31.03.05 - 16:38:29 »
Ja, dazu verwendest Du bitte den zweiten Button von rechts und nicht den ganz rechts ..... wir sind Dir alle dafür dankbar


Oh, sorry das ist ungewollt.
Ich habe nicht verstanden, welchen Button Du meinst.
Der Button Antworten reicht doch oder?

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: DATEN IN DB2 Schreiben
« Antwort #12 am: 31.03.05 - 16:54:46 »
Gemeint ist, wenn Du einen neuen Thread, ein neues Thema eröffnest. Das heisst in der Forumsübersicht sind die Buttongs gemeint. Dort gibt es keinen Antwort-Buttong. Schau Dir mal den Anfang dieses Threads an:

Titelbalken "Umfrage"

Darunter eine Frage .....

Das ist hier fehl am Platz und dadurch verursacht, dass Du den Buttong "Neue Umfrage" gewählt hattest, statt "Neues Thema", als Du das Thema angefangen hast.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz