-
SQL Auto Increment
Hallo Allerseits, oder meinentwegen auch Helau oder dergleichen......
Ich habe folgendes Problem. In einer DDS-definierten Tabelle gibt es ein numerisches Feld, welches beim Füllen der Tabelle mittels eines SQL-Statements (insert into TABLE.......) 'automatisch' hochgezählt werden soll.....
Wie kann/könnte man sowas in SQL realisieren?
OS/400 V5R4
Vielen Dank für alle Tips
Grüsse
Alexander
-
SQL Auto Increment
Hallo WEIDENHAMMER & *ALL !
ich glaube, das geht so :
CREATE TABLE TBL (LFDNR INTEGER GENERATED ALWAYS AS IDENTITY
(START WITH 10 , INCREMENT BY 10), usw...andere Felder . Natürlich START WITH und INCREMENT BY dürfen andere Werte haben.
Viel Spaß noch für Heute.
-
Per CREATE SEQUENCE kannst du einen Zähler erstellen.
Per "NEXT VALUE FOR MySeq" kannst du den dann zählen lassen.
Alternativ machst du einen BEFORE-INSERT-Trigger und veränderst den Puffer selber.
Problem:
Beim Insert erfährst du nichts über die vergebene Sequence-Nr.
Nächste Alternative ist ein Feld vom Typ ROWID, die wird vom System selber verwaltet.
Auch hier erfährst du beim Insert zunächst nichts.
-
Hallo,
ROWID ist alles andere als ein vernüftiger Zähler!!!
Sondern ein verschlüsselter 40A Wert!
Entweder man generiert die Tabelle mit SQL neu und verwendet eine Identity Column oder man geht den Weg über das SEQUENCE-Objekt und before Insert Trigger.
Übrigens kann man auch aus dem Sequence Objekt den aktuellen Zähler ermitteln.
Birgitta
-
Hallo,
was ist schon vernünftig? was für MS-Access vernünftig sein mag, muss für DB2 noch lange nicht vernünftig sein. Diese Auto Increment Felder sind da ein typisches Beispiel: was mit einer einzigen zentralen Procedure getKey(Dateiname, Feld) einfach und durchschaubar programmierbar war, wird mit aller Gewalt dadurch ersetzt, dass man sich einen Schlüsselwert von der Datenbank reinmalen lässt und anschließend eine Funktion aufrufen muss, die einem mitteilt, was die Datenbank jetzt da rein gemalt hat und warum das ganze? Einfacher wird es dadurch nicht, durchschaubarer auch nicht, aber MS-Access kann das ja schließlich auch?! Dieses Feature kann nur in der Fassenacht entstanden sein.
mfg
Dieter Bender
 Zitat von B.Hauser
Hallo,
ROWID ist alles andere als ein vernüftiger Zähler!!!
Sondern ein verschlüsselter 40A Wert!
Entweder man generiert die Tabelle mit SQL neu und verwendet eine Identity Column oder man geht den Weg über das SEQUENCE-Objekt und before Insert Trigger.
Übrigens kann man auch aus dem Sequence Objekt den aktuellen Zähler ermitteln.
Birgitta
-
Naja, ganz so schlimm ist es ja nicht.
Ich arbeite auch gerne mit dem Zähler, da viele Zugriffe und Querverweise mit dieser eindeutigen Nummer einfach klarer sind.
Ausserdem stellt es (ggf.) sicher, dass man nicht so einfach per ODBC Daten unterjubeln kann.
Um den Wert zu erfragen, kann man auch in 2 Schritten vorgehen, wenn man denn das Ergebnis benötigt:
exec sql set : MyCount = next value for MySeq;
insert into mytable Values(: MyCount, ...);
Ob das aber performant ist ...
-
Eindeutiger Schlüssel immer, Kunstkey (sprich Zähler) meistens, wegen der Problematik Änderung semantischer Keyfelder und einfacherer Normalisierung, die Alternative ist dabei:
- Erzeugung des Schlüssels in der Applikation und reinschreiben in die Datenbank
- Erzeugung des Schlüsselwertes in der Datenbank und dann ermitteln aus der Datenbank
Bei Access (Eingabe in die Datenbank ohne Applikation) spricht einiges für den zweiten Weg. Bei DB2 spricht vieles für den ersten Weg, es sei denn, man will wirklich mit ODBC (oder von der schnellen Eingreiftruppe DFU 9) ohne Applikation Daten in die Datenbank reinmalen lassen - net wirklich ernst gemeint???
D*B
 Zitat von Fuerchau
Naja, ganz so schlimm ist es ja nicht.
Ich arbeite auch gerne mit dem Zähler, da viele Zugriffe und Querverweise mit dieser eindeutigen Nummer einfach klarer sind.
Ausserdem stellt es (ggf.) sicher, dass man nicht so einfach per ODBC Daten unterjubeln kann.
Um den Wert zu erfragen, kann man auch in 2 Schritten vorgehen, wenn man denn das Ergebnis benötigt:
exec sql set : MyCount = next value for MySeq;
insert into mytable Values(: MyCount, ...);
Ob das aber performant ist ...
-
 Zitat von BenderD
Diese Auto Increment Felder sind da ein typisches Beispiel: was mit einer einzigen zentralen Procedure getKey(Dateiname, Feld) einfach und durchschaubar programmierbar war...
Dieses Feature kann nur in der Fassenacht entstanden sein.
Dieter, Du weisst doch, wieviele Features (gerade in unserer Branche) im Vollsuff (tschuldigung) entstanden sind - und alle freuen sich auch noch drüber. Früher hat man als Notlösung MAX() auf einen Key genommen. Und? Geht immer noch, wenn man denn einen passenden Key hat.
Mal schauen, was V7R1 an netten Fassenachtsüberraschungen mit sich bringt.
Helau,
-h
-
... mal abgesehen davon, dass max schief geht wenn zwei das glleichzeitig versuchen ohne die ganze Table zu sperren, vielleicht gibt es ja kein V7R1 mehr, weil dass dann VauEi heißt, oder die AS/400 dem Auto decrement zum Opfer fällt
http://upload.wikimedia.org/wikipedi...d_Car_Park.jpg
D*B
 Zitat von holgerscherer
Dieter, Du weisst doch, wieviele Features (gerade in unserer Branche) im Vollsuff (tschuldigung) entstanden sind - und alle freuen sich auch noch drüber. Früher hat man als Notlösung MAX() auf einen Key genommen. Und? Geht immer noch, wenn man denn einen passenden Key hat.
Mal schauen, was V7R1 an netten Fassenachtsüberraschungen mit sich bringt.
Helau,
-h
-
 Zitat von BenderD
... mal abgesehen davon, dass max schief geht wenn zwei das glleichzeitig versuchen ohne die ganze Table zu sperren, vielleicht gibt es ja kein V7R1 mehr, weil dass dann VauEi heißt, oder die AS/400 dem Auto decrement zum Opfer fällt
http://upload.wikimedia.org/wikipedi...d_Car_Park.jpg
D*B
ROFL, so würd ich gern mal die Autos der Nachbarn parken, die immer wüst in der Gegend rumstehen.
Von einem guten Locking ging ich aus, andererseits braucht man so selten Zählerspalten, wenn das Datenmodell sauber ist.
Übrigens - bis jetzt heissts überall V7R1, aber Vi (oder iV7) wäre auch mal was neues.
Wo Apple doch grade das iPad (EiPatt) rausbringt, wäre ein iAm vielleicht angebracht?
-h
-
 Zitat von holgerscherer
ROFL, so würd ich gern mal die Autos der Nachbarn parken, die immer wüst in der Gegend rumstehen.
Von einem guten Locking ging ich aus, andererseits braucht man so selten Zählerspalten, wenn das Datenmodell sauber ist.
Übrigens - bis jetzt heissts überall V7R1, aber Vi (oder iV7) wäre auch mal was neues.
Wo Apple doch grade das iPad (EiPatt) rausbringt, wäre ein iAm vielleicht angebracht?
-h
Soweit ich weiß heißt es ja auch schon nicht mehr V6R1M0 sondern offiziell (IBM) i 6.1 und das nächste wird dann IBM i 7.1
Birgitta
-
 Zitat von B.Hauser
Soweit ich weiß heißt es ja auch schon nicht mehr V6R1M0 sondern offiziell (IBM) i 6.1 und das nächste wird dann IBM i 7.1
ja, IBM i 7.1 ist eher offiziell, aber das ist ein sehr schlechter Suchbegriff für die Suchmaschine. Da ist V7R1 oder R710 eher geeignet, und in vielen Dokumenten werden auch diese Strings verwendet 
-h
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
By deni87991 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 14-08-06, 12:05
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By scoobydoo in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 25-11-05, 10:40
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks