Warum bin ich immer ein "[SQL0802] Daten-Konvertierung von Daten-mapping-Fehler" - Ausnahme?
Ich bin nicht sehr vertraut sind mit iseries/DB2. Jedoch, ich arbeite auf einer website, verwendet es als Ihre primäre Datenbank.
Eine neue Spalte wurde vor kurzem Hinzugefügt, um eine vorhandene Tabelle. Wenn ich es über AS400, sehe ich die folgenden Daten geben:
Type: S
Length: 9
Dec: 2
Dieser sagt mir, es ist ein numerisches Feld mit 6 stellen vor dem Dezimalpunkt und 2 stellen nach dem Komma.
Wenn ich die Abfrage der Daten mit einem einfachen SELECT (SELECT MYCOL FROM MYTABLE
), bekomme ich wieder alle Datensätze, ohne ein problem. Jedoch, wenn ich versuche mit einem DISTINCT
, GROUP BY
oder ORDER BY
auf die gleiche Spalte, bekomme ich die folgende exception:
[SQL0802] Data conversion of data mapping error
Habe ich gefolgert, dass mindestens ein Datensatz enthält ungültige Daten - was mein DBA fordert, "Leerzeichen" oder "4 O". Wie ist das möglich obwohl? Sollte nicht die Datenbank eine exception werfen, wenn ungültige Daten wird versucht, die Hinzugefügt werden, die Spalte?
Gibt es eine Möglichkeit, die ich bekommen kann, um dieses, wie das herausfiltern dieser schlechte Datensätze in meiner Abfrage?
Was ist die Fehler-Art code, wie in der zweiten Ebene text Ihrer SQL0802 Nachricht?
22023"
InformationsquelleAutor Eric Belair | 2012-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
"4 O" bedeutet, 0x40, das ist der EBCDIC-code für ein Leerzeichen oder ein Leerzeichen und ist der Standardwert in jeder neuen Speicherplatz in einem Datensatz.
Legacy-Programme /Vorgänge vorstellen können, die decimal-Daten Fehler. Zum Beispiel, wenn die neue Datei erstellt wurde, und gefüllt mit den
CPYF
- Befehl mit derFMTOPT(*NOCHK)
option.Der einfachste Weg, es zu beheben ist das schreiben eines HLL-Programm (RPG) zum Lesen der Datei, und korrigieren die Einträge.
InformationsquelleAutor jamesallman
Die einzige Lösung, die ich finden konnte, war ein Skript schreiben, der überprüft, ob leere Werte in die Spalte und aktualisiert diese auf null gesetzt, wenn Sie gefunden werden.
InformationsquelleAutor Eric Belair
Wenn die Datei record-format-Niveau-Prüfung ausgeschaltet [ie.
LVLCHK(*NO)
] oder überschrieben wird, dann ist eines HLL-Programms. (ex. RPG, COBOL, etc) , war nicht neu kompiliert mit dem neuen Datensatz zu schreiben, die Datensätze mit ungültigen Daten in dieser Spalte, vor allem, wenn die neue Spalte nicht an das Ende des Datensatzes.Stellen Sie sicher, dass alle Programme, die mit native I/O zu schreiben oder aktualisieren von Datensätzen, die auf diese Datei neu kompiliert werden.
InformationsquelleAutor WarrenT
Konnte ich lösen diesen Fehler durch Kraft-casting der Schlüssel Spalten in integer. Ich habe die join...
......
...und ich habe keine Korrekturen an den Tabellen. Dies ist eine sehr alte, sehr chaotisch-Datenbank mit viel junk. Ich ' ve gemacht, viele Korrekturen, aber es ist ein work in progress.
InformationsquelleAutor spinjector