[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2014
    Beiträge
    33

    Probleme mit Identity Column in Table

    Hallo zusammen,

    Ich habe eine Datei (TABLE) mit einem Identity Column.
    Sporadisch kommt es vor, dass dieses Feld scheinbar nicht vom System hochgezählt wird.
    Bei einem Insert erscheint somit die Meldung "Doppelter Schlüssel vorhanden".
    ADNR wird hochgezählt - habe ich beim Debuggen bereits geprüft.

    Hatte jemand schon mal dieses Phänomen bzw. eine Idee voran es liegen könnte.
    Entsprechender Code folgt unten, da beim Hochladen eines Anhanges ein Fehler auftrat.

    Vielen Dank im Voraus...

    =====================
    Referenzdatei
    =====================
    CREATE TABLE MYLIB/REFDATP (

    SID INT NOT NULL GENERATED ALWAYS AS IDENTITY
    (START WITH 1
    INCREMENT BY 1
    CYCLE
    CACHE 10
    MAXVALUE 999999999),

    ADNR NUMERIC(8, 0) NOT NULL WITH DEFAULT ,
    LDKZ CHAR(3) CCSID 273 NOT NULL WITH DEFAULT ,
    STR CHAR(35) CCSID 273 NOT NULL WITH DEFAULT ,
    LDKZ CHAR(3) CCSID 273 NOT NULL WITH DEFAULT ,
    ORT CHAR(35) CCSID 273 NOT NULL WITH DEFAULT );

    =====================
    Adressen
    =====================
    CREATE TABLE MYLIB/ADRESSP AS
    (SELECT SID AS AD0SID,
    ADNR AS AD0ADNR,
    STR AS AD0STR,
    STR AS AD0STR2,
    LDKZ AS AD0LDKZ,
    ORT AS AD0ORT,
    ORT AS AD0ORT2
    FROM MYLIB/REFDATP)
    WITH NO DATA
    INCLUDING IDENTITY COLUMN ATTRIBUTES
    RCDFMT ADRESSR;

    LABEL ON TABLE MYLIB/ADRESSP IS 'Adressenstamm' ;

    ALTER TABLE MYLIB/ADRESSP
    ADD CONSTRAINT ADRESSP_PK PRIMARY KEY (AD0SID);

    ALTER TABLE MYLIB/ADRESSP
    ADD CONSTRAINT ADRESSP_UK UNIQUE (AD0ADNR);

    =====================
    Code im Zugriffsprogramm
    =====================
    exec sql
    INSERT INTO ADRESSP
    VALUES(DEFAULT,
    :n_AD0ADNR,
    :n_AD0STR,
    :n_AD0STR2,
    :n_AD0LDKZ,
    :n_AD0ORT,
    :n_AD0ORT2);

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Das Problem mit solchen Spalten ist, dass diese nur beim Insert belegt werden.
    Es wird aber nicht verhindert, dass beim Update der Wert verändert wird.
    Dies lässt sich nur mit einem Before-Insert-Trigger prüfen, wer der Verursacher beim Ändern ist.
    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.869
    Evt. hilft aber auch schon, wenn der Cache von 10 erhöht wird. U.U. kann das System bei Massen-Inserts die neuen Werte in Cache nicht schnell genug nachladen.

    Sofern sichergestellt ist, dass die ID nicht durch einen manuellen Eingriff geändert wurde und dadurch diese Duplicate erzeugt wurden, und außerdem sichergestellt ist, dass die ID nicht manuell neu aufgesetzt wurde oder durch CYCLE wieder von vorne angefangen wird, würde ich einen CALL bei IBM eröffnen.

    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
    Mar 2014
    Beiträge
    33
    Gibt es die Möglichkeit im Vorfeld zusehen welche ID das System beim nächsten INSERT vergeben wird?
    Ich kann ja nicht unbedingt davon ausgehen, dass es die letzte in der Datei vorhanden ID + 1 ist, falls
    diese manuell neu aufgesetzt wurde..

  5. #5
    Registriert seit
    Jan 2007
    Beiträge
    904
    Kurze Frage (bin ja kein SQL-Held):
    Gibt es evtl. einen Key-Ueberlauf?
    Den Max-Value hast du bei 999999999 definiert, dein Keyfeld ist jedoch nur 8 stellig.
    kf

  6. #6
    Registriert seit
    Mar 2014
    Beiträge
    33
    Der Max-Value bezieht sich auf die ID nicht auf die ADNR.
    Die Datei hat zurzeit 25690 Sätze - entsprechend ist auch die ADNR.
    Also kein Key-Ueberlauf.

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Da hier mit GENERATED ALWAYS gearbeitet wird, kann die ID nicht manuell geändert werden.
    Weder bei einem INSERT noch einem UPDATE.
    Ich würde auch, wie Birgitta schon vorgeschlagen hat, einen CALL bei der IBM eröffnen.

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    So wie Du die Identity definiert hast bezieht sich der MaxValue NICHT auf ADNR, sondern auf die ID.

    Schau Dir die Spalten-Definition doch mal über die Catalog-View SYSCOLUMNS an.

    Die nächste Identity-Nr kannst Du aus der Catalog-View SYSPARTITIONSTAT (Spalte NEXT_IDENTITY_VALUE) ermitteln.

    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

  9. #9
    Registriert seit
    Mar 2014
    Beiträge
    33
    @B.Hauser
    Genau das habe ich ja um 10:01 an @camouflage geschrieben (Thema ADRNR)!
    Wo finde ich den Catalog-View SYSPARTITIONSTAT? Wir haben V5R4 auf der Maschine?

    @andreaspr@aon.at
    Eine Zurücksetzung/Änderung mit dem OPSERV ist schon möglich!

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Bei V5R4 wird es keine Fehlerbehebung mehr geben, da nützt ein IBM-Call auch nichts mehr.
    Da ist halt raten angesagt.
    "Generate Always" bedeutet nur beim Insert, dass ein Wert vergeben wird, egal ob ich NULL angebe, das Feld nicht verwende oder eine bestimmten Wert eintrage. Wäre ja fatal, wenn ein Update den Wert ständig verändern würde.
    Dies verhindert nicht den (versehentlichen) Update des Wertes.

    Auch könnte das Zurücksetzen des Wertes zu doppelten Sätzen führen. Eine Überlauf bei 2^31 Werten halte ich eher für unwarscheinlich.
    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
    Bei einem so alten Release, wirst Du auch keine Unterstützung von der IBM mehr bekommen.
    Ob es die View SYSPARTITIONSTAT schon in Release V5R4 gab, weiß ich nicht aus dem Stehgreif.
    Ansonsten findest Du die View in der Bibliothek QSYS2.

    ... ich finde es immer erstaunlich, dass Firmen auf der i mit Release-Ständen arbeiten, die über 10 Jahre alt und bereits seit 3 Jahren abgekündigt sind. Das aktuelle Release 7.2 (zwischen V5R4 und 7.2 sind noch die Releases 6.1 und 7.1), ist inzwischen auch schon wieder 2 Jahre alt und es wird spekuliert, ob im Mai das nächste Release angekündigt wird.

    ... auf der anderen Seite werden oft bei den gleichen Firmen im PC-Bereich keine Kosten gescheut, um immer auf dem neuesten Stand zu sein.
    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
    Feb 2001
    Beiträge
    20.207
    Vielleicht liegt das ganz einfach an der Lizenzpolitik sowie den Preisen für neue Hardware.
    Im Gegensatz zu Windows läuft die AS/400 eben sehr stabil.
    Warum soll ich ein OS-Update durchführen wenn ich gleichzeitig auch noch die Hardware austauschen muss?
    Warum soll ich teurere Compiler bezahlen nur weil die IBM die OPM-Compiler abschaffen will bzw. sich nun teuer bezahlen lässt?
    Warum soll ich auf das teure und größere und schnellere Hardware voraussetzende Web/Query umsteigen wenn mir das Query/400 ausreicht und ich ansonsten PC-Lösungen einsetze?
    Manchmal verhindert auch meine ERP-Anwendung den Umstieg weil ich vielleicht keine Quellen habe und das Softwarehaus nicht mehr existiert und es auch keinen AS/400-Softwarenachfolger gibt.
    Es gibt viele Gründe den Status Quo beizubehalten. Im Mittelstand sind es hier tatsächlich die Kosten und den vermissten tatsächlichen Mehrnutzen für meine existierenden Anwendungen.

    Und dann gibt es noch solche wie mich, die diesen Anwendern auch noch helfen, mit diesem Status Quo noch weiter zu kommen.
    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

Similar Threads

  1. Frage zu CREATE TABLE
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 15-10-15, 23:36
  2. create table
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 18-05-15, 14:09
  3. ALTER TABLE Befehl
    By Franz.Rung in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-09-14, 07:14
  4. SQL Table etc....
    By mk in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 16-12-13, 13:11
  5. CREATE TABLE
    By Willi1 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-05-02, 09:38

Tags for this Thread

Berechtigungen

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