[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Feb 2006
    Beiträge
    78

    laufende Nummer in DB mit SQL aktualisieren

    Hallo,

    ich möchte gerne in eine DB eine laufende Nr. mit SQL einfügen.
    Mit "select ROW_Number() over(partition by myfeld) from mylib.mydb" funtkioniert das ja für die Anzeige.
    Gibts da auch was für UPDATE?

    Konkret erstelle ich in einer DB Sätze (für mehrere Firmen), nach einem zweiten Aufbau können Sätze hinzukommen oder entfernt werden.
    Danach sollte die Laufende Nr. wieder aktualisert werden, mit der Bedingung einer Gruppierung auf Firmenebene.
    D.H. ich möchte einfach pro Firma wieder eine aufsteigene Laufende Nr. beginnend bei 1 haben.

    Gibt es da eine Möglichkeit?

    Vielen Dank!
    XMan

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Stichwort "Identity"-Spalte.
    Die kann automatisch eine Nummer vergeben. Hierzu wird eine sog. "Sequence" automatisch verwendet.
    Alternativ kannst du das auch selber machen:

    create sequence MySeq

    insert into myfile (f1, SeqFld) values(xx, next value for MySeq)
    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
    Aug 2001
    Beiträge
    2.873
    Weder eine Identity Column, noch eine Sequence No berücksichtigen Gruppen-Wechsel.
    Einen laufenden Zähler automatisch abhängig von einer Gruppierung zu generieren geht nur mit einem Before-Update Trigger.

    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

  4. #4
    Registriert seit
    Feb 2006
    Beiträge
    78
    Guten Morgen!

    Danke für die Antworten!

    Und wie sieht so ein Before-Update Trigger für einen frei definierten Gruppenwechsel aus wenn bereits Daten in der DB sind?
    Ich habe leider noch nie etwas mit Triggern gemacht auf SQL.

    Thx

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Ein Updatetrigger hilft dir da wohl auch nicht, da dieser ja nur den aktuellen Satz betrachtet.
    Hier kannst du nur selber eine Prozedur (egal ob embedded SQL oder SQL-Procedure) schreiben, die per Select die Daten nebst Schlüssel sammelt und dann den Update je Schlüssel mit der neuen Nummer durchführt.
    Warum denn die Nummer immer neu vergeben?
    Bei ggf. Millionen von Sätzen ist das ein zeitraubender Vorgang.
    Sind Lücken denn relevant bzw. dürfen nicht vorkommen?
    Du kannst dir doch eine Mandantentabelle (die gibts meist ja schon) mit einem Zähler erstellen, der bei jedem Insert (before-Insert-Trigger) die neue Nummer beschafft.
    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

  6. #6
    Registriert seit
    Feb 2006
    Beiträge
    78
    Danke für die Info!

    Dann bleibt mir ein Nachlaufprogramm nicht erspart.

    Grund hierfür ist das ich Daten für eine Behörde (Summendatei) aus zwei Umgebungen (Lohn & Gehalt) aufbauen muss.
    In beiden Umgebungen Lohn & Gehalt gibt es teilweise gleiche Firmen mit Personensätzen.
    z.B. Lohn hat Firma A, B, D und Gehalt hat Firma A, C, D, E
    Die Behörde will aber nichts wissen von Lohn & Gehalt und somit pro Firma eine durchgehende Nummerierung der Personendaten haben.
    Nun zu meinem Problem, wenn die Daten im Lohn aufgebaut wurden und dann die Gehaltsdaten einfließen könnte ich ja bei der höchsten lfd.Nr. vom Lohn fortsetzen. Aber wenn die Lohndaten nochmals aufgebaut werden (weil nachträgliche Korrektur) dann kann es sein das es mehr oder weniger Sätze gibt und somit die Nummerierung nicht mehr stimmt.
    Das Spiel kann öfters vorkommen, somit muss ich am Ende über beide Umgebungen eine eindeutige Nummer für die Behörde erstellen.

    Wäre halt schön gewesen wenn es hier eine einfache SQL Lösung gegeben hätte.

    Danke dennoch für Euer bemühen!

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... was in der Anzeige geht, kann man mit einem einfachen QMQRY in eine Ausgabedatei brettern, wo ist das Problem?
    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 2006
    Beiträge
    78
    Zitat Zitat von BenderD Beitrag anzeigen
    ... was in der Anzeige geht, kann man mit einem einfachen QMQRY in eine Ausgabedatei brettern, wo ist das Problem?
    Und wie geht das?

    Thx

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    du packst dein SQL Statement in eine Textdatei, erstellst das QMQRY mit CRTQMQRY und führst es mit STRQMQRY aus, letzteres hat einen Parameter OUTPUT, der *outfile erlaubt.

    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/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wenn du deine Daten für die Behörde aufbereitest musst du doch die Nummer nicht zurückschreiben, da sie sich doch sowieso jedesmal ändern kann.
    Also mach einen SQL fertig (select blabla) und bette diesen in einen QMQRY ein (STRQM).
    Per STRQMQRY kannst du dann eine Ausgabedatei erstellen.

    Alternativ mache:
    create table as (
    select ....
    ) with data
    Und bearbeite die Ausgabe dann z.B. per CPYFRMIMPF.
    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
    Feb 2006
    Beiträge
    78
    OK, werde ich mal versuchen ob das so klappt.


    Danke!

Similar Threads

  1. PERSONAL2014 Nord und Süd: IT für Personalabteilungen aktualisieren
    By Burgy Zapp in forum Archiv NEWSboard Events
    Antworten: 0
    Letzter Beitrag: 12-02-14, 18:34
  2. Antworten: 0
    Letzter Beitrag: 12-02-14, 18:34
  3. Datenbank aktualisieren
    By Markus Ralf in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 03-09-02, 12:20

Berechtigungen

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