invalid number finden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • invalid number finden

    Hallo,

    (Datenbank Oracle 9iR2)

    ich habe eine Importtabelle in welche Daten per Sqlloader geladen werden.
    Alle Spalten sind vom Type varchar2.
    In dieser Tabelle werden die Daten dann manipuliert und in eine history tabelle geschrieben. Dort sind die Spaltentypen differenzierter (varchar2,number,date).

    Nun kommt es manchmal vor, das in dem File, welches mit dem SQl loader geladen wird, fehlerhafte nummern enhalten sind. Beim import in die Importtabelle macht sich dies noch nicht bemerkbar. Wird nun aber von dort in die Historytabelle geschrieben, dann taucht der Fehler:

    PHP-Code:
     ORA-01722invalid number ... 
    auf.

    Somit muss ich das file, oder die Importtablle nach dem Nummernfehler
    durchsuchen.

    Gibt es nicht irgendeine Möglichkeit, mit der sich feststellen lässt, in welcher reihe, oder in welcher Spalte der Fehler liegt? (Also den Fehlerbereich stark einzuschränken)

    (zur Info: File ist 300-400 Reihen lang und ca 15 Spalten breit
    => Suche sehr mühsam)

    Danke füR Tipps

  • #2
    Hä?

    Die Fehlermeldung kommt doch nicht, weil 17 erwartet wurde und 15 ankam. Das hat doch einen Grund, zum Beispiel signed value statt unsigned oder bigint statt tinyint oder int statt float.

    Also lade alles in die Importtabelle (das klappt ja anscheinend) und suche mit einer Query nach sehr kleinen/großen/vorzeichenbehafteten Werten. Schau wo sie in der History landen würden und ob der dortige Datentyp dazu paßt.

    Kommentar


    • #3
      Hä,

      das was du sagst habe ich fast genau so oben schon beschrieben.

      ISt mir schon klar, das das am falschen Typ oder zu grossen Werten liegt, welche in ein Number feld eingetragen werden sollen.

      Ich will jetzt aber wissen, bei genau welcher Zeile, oder Spalte der Importtabelle der zu grosse(oder Falsche Typ) Wert steht. Weil wenn das file noch grösser wird, dann wird ein finden des Fehlers fast unmöglich.

      Kann man in der Fehlermeldung nicht irgendwie ausgeben, mit Welchem Wert oracle beim insert die Probleme hat?

      Kommentar


      • #4
        Original geschrieben von galaxy2
        Kann man in der Fehlermeldung nicht irgendwie ausgeben, mit Welchem Wert oracle beim insert die Probleme hat?
        Keine Ahnung, aber es ist der erste, der den Datentyp sprengt.

        Irgendwie ziehst du die Daten aus der Importtabelle ja in die Historytabelle. Dabei wird import.x zu history.y, irgendwann knallts, weil x nicht in y paßt.
        Zwei Möglichkeiten, den Knall zu verhindern:
        1. Datentyp von y anpassen.
        2. Mit SQL prüfen, welche x größer/kleiner/anderes Format sind als y vertragen kann.

        Beispiele:
        alle Floats: SELECT * FROM import WHERE ROUND(x) != x
        alle zu großen: SELECT * FROM import WHERE x > <sizeof_y>

        Kommentar

        Lädt...
        X