[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2015
    Beiträge
    356

    SQL Insert schmiert ab

    Hallo zusammen,
    habe wieder mal eine Frage:
    Ich möchte per SQL-Statement in einem CL von einer Quelldatei Datensätze in eine leere Zieldatei schreiben (mit INSERT). Die Kundennummer ist sowohl in der Quelldatei wie in der Zieldatei der UNIQUE-Key. Es gibt zu 100% in der Quelldatei KEINE Duplicate-Keys. Das habe ich überprüft. Dennoch bekomme ich die Meldung unten.
    Verstehe ich nicht, vor allem was ist die Satznr. 0 ?

    Für Hilfe wäre ich sehr dankbar. Grüße A. und schönes langes WE.

    =====================================


    Nachrichten-ID . . . . : CPF5009 Bewertung . . . . . . : 10
    Nachrichtenart . . . . : Diagnose
    Sendedatum . . . . . . : 02.10.24 Sendezeit . . . . . . : 19:44:35

    Nachricht . . . : Doppelter Satzschlüssel in Teildatei SAPBMADR.
    Ursache . . . . : Die Ausgabe- oder Fortschreibungsoperation bei
    Teildateinummer 1, Satznummer 0, Format SAPPRADR für Teildatei SAPBMADR in
    Datei SAPBMADR in Bibliothek CCMPDTA1 ist fehlgeschlagen. Teildateinummer 1,
    Satznummer 1741, Format SAPPRADR, hat den gleichen Schlüssel wie
    Teildateinummer 1, Satznummer 0, Format SAPPRADR. Ist die Satznummer null,
    ist der doppelte Satzschlüssel bei einer Ausgabeoperation entstanden.
    Fehlerbeseitigung: Einen der beiden Satzschlüssel ändern, damit die Schlüssel
    eindeutig sind. Anschließend die Anforderung wiederholen.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.473
    Nun ja, prüfen kannst du das, in dem du die Quelldatei auswertest mit

    select kundennummer, count(*)
    from datei
    group by kundennummer
    having count(*) > 1

    Bei Unique darf im übrigen auch kein NULL vorkommen.
    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.327
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Bei Unique darf im übrigen auch kein NULL vorkommen.
    ... null stört unique Bedingungen nicht, ein wichtiger Grund, warum man sie verwendet!

    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
    Feb 2001
    Beiträge
    20.473
    Nun ja, bei Primary Key darf die Spalte nicht nullable sein.
    Bei anderen DBM's gilt das z.T. auch auf Unique-Keys. Non-Unique erlaubt NULL.

    Zu obigem insert into ... select ... from könnte auch ein Join mit 1:N-Beziehung zur Vervielfältigung führen.
    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

  5. #5
    Registriert seit
    Jun 2015
    Beiträge
    356
    Hallo zusammen und vielen Dank für die Hilfe. Der SQL war schon mal klasse. Dennoch verstehe ich das ganze noch nicht so recht. Es sind 2 Kundennummern (102040+125196) die offenbar die Duplicates in der Zieldatei verursachen und zum Abbruch führen. Das konnte ich mit dem SQL rausbekommen. Aber in der Quelldatei sind diese Kundennummern definitiv nur 1x vorhanden. Woran liegt's jetzt dann noch ?
    Viele Grüße A.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.473
    Dann zeige den SQL doch einfach mal.
    Ggf. hast du einen left Join?
    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
    Jun 2015
    Beiträge
    356
    Ich habe das Problem gefunden. In der Tat Du hast recht, verursacht wurde das Problem durch den LEFT JOIN der im SQL codiert ist. Normal sollte ja auch in der Tabelle die im LEFT JOIN angesprochen wird, nur ein Datensatz zur Kundennummer vorhanden sein. Da das aber eh ein Schrottsatz ist, habe ich diesen gelöscht. Und wieder mal zeigt sich, es gibt keine 'schwarze Magie'. Besten Dank für Deine Hilfe. Grüße A.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.473
    Dabei ist SQL ja so simpel. Von einfach bis komplex ist vieles möglich, inclusive Cubes, Pivot und Unpivot.
    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
    Oct 2004
    Beiträge
    246
    Der Vollständigkeit halber (auch wenn die Ursache bereits gefunden wurde):

    Da es einen Konflikt zwischen 2 Sätzen gibt (einen bestehenden und einen neuen Datensatz), gibt es die Satznummer auch 2x in der Fehlermeldung:


    Teildateinummer 1,
    Satznummer 1741, Format SAPPRADR, hat den gleichen Schlüssel wie
    Teildateinummer 1, Satznummer 0, Format SAPPRADR.

    Deshalb hätte man mit
    SELECT * FROM
    SAPBMADR where RRN(SAPBMADR) = 1741

    den vorhandenen Satz gefunden.

    Das Überprüfen der Daten hilft nur bedingt weiter, weil wie du (@alex61) ja festgestellt hast, sind Kunde vorher nur einmal vorhanden. Sie lassen sich halt nicht nochmal reinschreiben.





  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.473
    Deshalb ist es mit SQL Having-Klausel doch ein wenig schneller.
    Und wenn man weiß, dass die Quelle unique ist, muss es am SQL selber liegen.
    Und da liegt dann ein 1:N-Join nahe;-).
    Problematischer wird die Analyse dann, wenn die Quelle auch noch eine View ist.
    Denn das Create View-Statement kann schon mal heftiger sein.

    Im Ergebnis wurde ja auch mehr als 1 doppelter Schlüssel gefunden.
    Und es hätten da sogar noch wesentlich mehr sein können, was mit der RRN-Methode mühsam geworden wäre. Denn diese ist ja die Satznummer der Ziel-Tabelle.
    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
    Oct 2004
    Beiträge
    246
    Zitat Zitat von alex61 Beitrag anzeigen
    ..
    Verstehe ich nicht, vor allem was ist die Satznr. 0 ?
    ...
    Wie schon geschrieben, vervollständigte ich die noch offene Frage.

    Das man Having ganze Tabellen schneller überprüft ist auch klar. Wobei das Prüfen auf Konflikte von Quell und Zieltabelle noch nicht abgedeckt ist (muss man beim INSERT machen).

    Vollständigkeitshalber - Teil 2:
    Es gibt auch ein (mühsames) MERGE INTO. Mit dem könnte man z.B. ein Änderungsdatum setzen oder Daten aktualisieren.

    https://www.ibm.com/docs/en/i/7.3?topic=language-merging-data

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.473
    Es ging aber um "in eine leere Zieldatei". Da gibts im Ziel ja vorab nichts zu prüfen.
    Satz-Nr. 0 ist eben, dass der einzufügende Satz nun als Dublette auffällt und die Satznummer > 0 eben der bereits aus der Quelle eingefügte Satz.
    Wenn man das Ganze jetzt noch unter Commit laufen lässt, ist durch den Absturz das Ziel wieder leer;-).
    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. SQL INSERT if not exist then update
    By chrisonline in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 29-07-15, 12:33
  2. COBOL SQL INSERT Satznummer des Inserts
    By heg in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 10-10-14, 16:13
  3. SQL V5R4 Insert into
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 10-10-14, 09:13
  4. Parameterübergabe in Prozedur -> Compiler schmiert ab
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 23-11-04, 17:46
  5. SQL insert mit variable
    By Robi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-03-03, 10:16

Berechtigungen

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