[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: UUID

  1. #1
    Registriert seit
    Jun 2009
    Beiträge
    308

    Red face UUID

    gibt es auf der AS400 einen ähnlichen SQL Befehl wie den SELECT NEWID()

    auf dem SQL Server?

    Wenn ja, kann ich ein Beispiel haben?

    Vielen Dank

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    19.847
    Nein, gibt es leider nicht.
    Hier musst du die C-Funktion GENUUID aufrufen, die dann die MI-Instruction aufruft:
    https://www.ibm.com/support/pages/ge...re-random-uuid
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.189
    ... mit GENUUID wäre ich vorsichtig, da hieß es in der Doku "most likely unique" und auf Multiprozessor-Maschinen gab es Kollisionen und ich gehe mal davon aus, dass das immer noch so ist.

    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
    Jan 2012
    Beiträge
    1.017
    So weit ich weiß, gibt es das nicht direkt in SQL. Aber es gibt eine von IBM eine API "_GENUUID", mit der man mit RPG UUIDs generieren kann. Wenn man so ein RPG-Programm hat, könnte man das eine SQL-UDF einpacken und man hätte die gewünschte Funktion auch im SQL.

    Hier ein Beispiel für das RPG:

    Code:
           dcl-proc um_crtUUID export;          
             dcl-pi *n char(36)
             end-pi;
    
         D UUID_template   Ds
         D  UtBytPrv                     10u 0 Inz( %Size( UUID_template ))
         D  UtBytAvl                     10u 0
         D                                8a   Inz( *Allx'00' )
         D  UUID                         16a
         D  Reply                         1a
    
         D GenUuid         PR                  ExtProc('_GENUUID')
         D  UUID_template                  *   Value
    
           GenUuid( %Addr( UUID_template ));
    
          return UUID;
    
          end-proc;

  5. #5
    Registriert seit
    Jun 2009
    Beiträge
    308
    OK vielen Dank für die Hinweise.

    Das RPG Beispiel kenne ich schon
    GENUUID ist ja vllcht wirklich nichts

    Na denn, ich hab gedacht es gibt einen fertigen SQL Befehl, den mir evtl. Birgitta mitteilt.

    Vielen Dank nochmal

    Grüße Dschainers

  6. #6
    Registriert seit
    Nov 2020
    Beiträge
    222
    Es gibt SQL Sequenzen die du dafür verenden kannst.
    Ansonsten kannst du beim Erstellen bei Tabellen eine IDENTITY Spalte erstellen, wo die ID automatisch vom System generiert wird.

    lg Andreas

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.017
    Wenn ich Dschainers richtig verstehe, sucht er ja keine eindeutige ID für eine Tabelle, sondern eine weltweit eindeutige ID.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    19.847
    Laut dem Link der IBM ist das Generieren ja verbessert worden.
    Ein Kunde (AS-Mike) von mir verwendet diese Routine auf einer P9 inzwischen für die Web-Kommunikation und doppelte ID's hats bis jetzt nicht gegeben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.820
    ... sollte eine Identity Column nicht ausreichen (z.B. weil auf unterschiedlichen Systemen in die "gleiche" Tabelle geschrieben wird und die Tabellen irgendwann wieder zusammengemischt werden)...

    Hast Du Dir schon einmal die Funktion GENERATE_UNIQUE() angeschaut
    GENERATE_UNIQUE()
    oder den Datentyp ROWID
    [URL="https://www.ibm.com/docs/en/i/7.5?topic=types-row-id-values"]ROWID?
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion 2022
    Virtuelle SQL und RPG Schulungen

  10. #10
    Registriert seit
    Jun 2009
    Beiträge
    308
    Vielen Dank für die Antworten.

    Ich schau mal was ich da gebrauchen kann.


    Dschainers

  11. #11
    Registriert seit
    Nov 2020
    Beiträge
    222
    Zitat Zitat von dschroeder Beitrag anzeigen
    Wenn ich Dschainers richtig verstehe, sucht er ja keine eindeutige ID für eine Tabelle, sondern eine weltweit eindeutige ID.
    Eine Sequenz ist nicht zwangsläufig auf eine Tabelle beschränkt.
    Damit bekommst du einfach jedes mal einen eindeutigen Wert, den du für was auch immer verwenden kannst.
    Bei einer eindeutigen ID für eine Tabelle würde ich eine IDENTITY Spalte definieren.

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.189
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Laut dem Link der IBM ist das Generieren ja verbessert worden.
    Ein Kunde (AS-Mike) von mir verwendet diese Routine auf einer P9 inzwischen für die Web-Kommunikation und doppelte ID's hats bis jetzt nicht gegeben.
    ... kommt doch immer auf die Anwendung an. Vor identity column und Gedöns auf der AS/400 habe ich mal den Vorschlag genuuid für database keys evaluiert und da haben wir uns im massiv parallel Betrieb wegen Kollisionen für eine andere Lösung entschieden. Gängige Varianten für UUIDs verwürfeln die mac mit einem Timestamp, sind also nur fast eindeutig (most likely unique). Wenn der Timestamp bis zur Taktfrequenz verfeinert wird, bleibt immer noch ein Problem bei Multiprozessor Maschinen (den man mit einem zusätzliche RAND() optimieren kann. Für eine Webanwendung sind die theoretisch denkbaren doppelten Keys meist hinnehmbar, für Datenbankkeys erzeugen sie zusätzlichen Aufwand und schlechtere Fehlertoleranz.

    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/

Berechtigungen

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