[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    1.973

    Lfnr innerhalb des 'eigendlichen' Key vergeben

    Moin,
    hier steht ja beschrieben, wie das mit der Lfd nr geht

    Ich bräuchte nun eine LfNr innerhalb des 'Restlichen Keys'

    Key:
    F1, F2, F3 + LfNr

    a, b, c, 1
    a, b, c, 2
    ...
    a, b, c, 189
    ...

    x, y, z, 1
    x, y, z, 2
    ...

    mit Key 1, 2 und 3 kann es /Tag 150- 300 Sätze geben.
    Datum und Uhrzeit ist recht lang und eigendlich egal.
    Nicht Unique geht aus anderen Gründen nicht.

    Bisher ist das 'händisch' gelöst.
    Aber ne neue Tabelle könnte ja mal 'modern' (was immer das bedeutet) gemacht werden.
    Geht das per 'SQL-Automatik?

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Einfache Antwort: nö!
    Aber du kannst eine Halbautomatik verwenden.
    Per Before-Insert-Trigger kannst du dir an Hand des Schlüssels die nächste Nummer ermitteln, falls noch keine vorhanden ist, den Wert 1 setzen.
    Allerdings muss man bedenken, dass dies durchaus parallel passiert und es dann zu doppelten Schlüsseln führt.

    Du kannst aber auch eine Identity-Column nehmen. Die nummeriert über Alles.
    Bei sequentiellen Abfragen nimmst du eine "ROW_NUMBER over(partition by k1,..., kn order by identity)" dazu.

    Dies hat auch den Charme, dass die Identity als Primary-Key für Update/Delete-Operationen sowie referential constraints verwendet werden kann.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... geht nicht gibts (fast) nicht:
    Wenn keiner auf die Tabelle per Rekord Löffel Ekzem los geht, kann man die Tabelle durch eine View ersetzen und dann per instead of Trigger funktionale Logik dazwischen klemmen. Das Problem doppelter Nummern kriegt man (auch in Baldurs Variante) per korrektem Commit Handling (nicht ganz trivial) weg.

    @Baldurs Variante: das wird bei referentiellen Beziehungen tricky.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Schade,
    ne bewährte 'Hand am Arm' Methode haben wir.
    Danke Euch ...
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Sofern es nur um einen eindeutigen Wert geht und der Zähler nicht für jeden Key bei 1 anfangen muss, kann auch mit einem SEQUENCE Objekt gearbeitet werden. Aus dem Sequence Object kann der nächste Zähler ermittelt werden. Mit jeder neuen Anfrage wird der nächste Wert ausgegeben. Bei einem Rollback bleibt die Sequence unverändert, d.h. der Wert wird nicht zurückgesetzt.

    Mit dem folgenden Statement kannst Du ein Sequence Object erstellen:
    Code:
    Create Sequence YourSchema.YourSeq As Integer Start With 1;
    Mit dem folgenden Befehl, der in SQL eingebunden werden kann, kannst Du den nächsten Wert ermitteln:
    Code:
    Next Value For YourSchema.YourSeq;
    Code:
    Insert into yourTable (yourSeqCol, ....)
    Values(Next Value For YourSchema.YourSeq, ....);
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    https://www.ibm.com/docs/en/i/7.2?to...dentity-column

    Wie heißt es so schön: Sequence ist obsolet, Identity ist nun state of the art.
    Dann passiert alles automatisch, next value of braucht man dann nicht, und auf Identity habe ich ja hingewiesen;-).

    Sequence ist nur noch relevant, wenn man eine Nummer über mehrere Tabellen haben möchte.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... was die IBM uns gnädig gibt, muss man auch nehmen.

    D*B

    @Nummer über mehrere Tabellen: da würde ich meinen Nackenhaaren vertrauen (die sträuben sich gerade) und über das Datenbank-Design nachdenken!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nun ja, Identity ist bei anderen DB's schon eher Standard;-).
    Ich habe auch schon Fehler gesucht wegen doppelter Sequence weil einer sich beim Insert vertippt hatte.
    Da gab es die Regel, Namen zu nummerieren. Tabellen mit Dnnnn, Sequence mit Snnnn. DA kann man schon mal daneben liegen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Nov 2020
    Beiträge
    315
    Die Identity Spalte kannst du mit anderen Spalten über den Primary Key kombinieren.
    Dann kann es eben die gleiche Identity Nummer mehrfach geben, wenn die anderen Primary Key Spalten unterschiedlich sind.
    Für mich ist die ID Spalte immer eindeutig.
    Du hast sonst auch Probleme wenn du via Forgein-Key Tabellen miteinander verknüpfen möchtest.

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Eine Identity-Spalte muss Unique sein, daher eigentlich auch Primary Key, sonst geht der Begriff "Identity" verloren.
    Allerdings kann man für Sortierzwecke die Identity-Spalte zusätzlich auch nach anderen Schlüsseln hinzufügen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Vielleicht will der Poster seine Datei nicht um eine Identity Column erweitern.
    Die Zählerspalte ist schon vorhanden und ist im Unique Key enthalten.
    ... also warum nicht über die Sequence füllen?

    Irgendwann, wenn man die Datei wieder anpacken muss, kann man auch eine Identity Spalte hinzufügen.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Vielleicht will der Poster seine Datei nicht um eine Identity Column erweitern.
    Die Zählerspalte ist schon vorhanden und ist im Unique Key enthalten.
    ... also warum nicht über die Sequence füllen?

    Irgendwann, wenn man die Datei wieder anpacken muss, kann man auch eine Identity Spalte hinzufügen.
    @warum nicht sequenz: weil man für jede Kombination eine eigene bräuchte und spätestens, wenn die Kombinationen nicht separat nacheinander erzeugt werden, Huddel vorprogrammiert ist!

    @Schlüssel später auf Identity column ändern: davon würde ich dringlichst abraten. Ich denke da an ein real world Besispiel, wo externe Berater einem Kunden für teures Geld eine "Datenbankmodernisierung" aufgeschwatzt haben. Das war dann: alle DDS erstellten Dateien auf SQL umstellen, Identity columns und allen Schnickschnack zufügen, alle Feldnamen auf längere schwafelnde Feldnamen ändern, anschließend auf diese Dateien alle vorherigen LFs erstellen, damit die Anwendung wieder passt. Richtig lustig wurde es dann, wenn die Altanwendung einen Satz gelöscht hat und dann (vermeintlich) denselben wieder eingefügt hat, der dann allerdings einen neuen Schlüssel bekam.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Berechtigung per SQL auf Index vergeben
    By HEBORA in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 21-04-20, 13:57
  2. Variable innerhalb von EXEC SQL nutzen
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 15-01-17, 17:05
  3. SQL mit enthaltenen Parametern innerhalb von CL's
    By _MG_ in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-12-15, 13:07
  4. 25.000.- Euro Weihnachtsgeld zu vergeben !
    By AS-Trade in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 19-10-02, 18:58
  5. Excel-Dateien innerhalb von OS/400 erstellen
    By Klaus in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 20-04-02, 19:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •