-
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.
-
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.
-
Zitat von Fuerchau
Bei Unique darf im übrigen auch kein NULL vorkommen.
... null stört unique Bedingungen nicht, ein wichtiger Grund, warum man sie verwendet!
D*B
-
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.
-
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.
-
Dann zeige den SQL doch einfach mal.
Ggf. hast du einen left Join?
-
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.
-
Dabei ist SQL ja so simpel. Von einfach bis komplex ist vieles möglich, inclusive Cubes, Pivot und Unpivot.
-
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.
-
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.
-
Zitat von alex61
..
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
-
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;-).
Similar Threads
-
By chrisonline in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 29-07-15, 12:33
-
By heg in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 10-10-14, 16:13
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 10-10-14, 09:13
-
By JonnyRico in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 23-11-04, 17:46
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks