Frage

Ich hatte hier Ärger in meiner Datenbank, ich verwende Firebird 1.5.3 und es funktioniert gut, bis Noe auf normale Weise lesen oder schreiben kann, aber wenn ich eine Prozedur ausführe, habe ich leeres Zeilenergebnis und die folgende Nachricht:

Arithmetische Ausnahme, numerischer Überlauf oder String -Kürzung.

SQL -Code: -802 IB -Fehlernummer: 335544321

Also habe ich es vor einem Monat mit meiner Backup -DB verglichen, es hat gut funktioniert, ich bekomme Daten in Zeilen. Um sicherzustellen, dass sich mein Code nicht geändert hat, kopiere ich beide Verfahren in Winmerge (Diff Compoper), aber nichts anderes. Um sicherzustellen, dass mein Fehler aus Daten stammt, führe ich meine Prozedur für alte datierte Transaktion (1 -jährige Daten) aus, dennoch erhalte ich diese Nachricht.

Ich überprüfe die aritmethische Logik in der Prozedur, modifiziert, aber kein Glück. Kann jemand dabei helfen?

Danke ein Haufen,

War es hilfreich?

Lösung

Nach einer langen Nachverfolgung in den Code und die Daten fand ich das Hindernis, das mich irgendwie herausfand. Es gab eine Änderung der Stammdaten, die jetzt Longger -Zeichen (VARCHAR) aufweist. In meinem Verfahren wurde es in eine kleinere Größe von Varchar gebracht, sagen Sie 10 Charakter. Während eine neue Zeichenfolge ungefähr 15 ist. Hier geht der Fehler ... oder String -Kürzung ..... Dank Ihrer Aufmerksamkeit auf mein Problem und danke für die Hinweise, die Sie geschrieben haben, rettet es mich irgendwie, gib mir die Idee, es zu verfolgen.

Danke ein Haufen,

Andere Tipps

Anderes Verhalten (in Backup DB und Live One) mit genau den gleichen Daten ist seltsam. Vielleicht macht sich ein anderer Verfahren oder ein anderer Auslöser mit Ihrer Abfrage in der Live -DB durcheinander.

Da Sie sagen, dass Sie den Code hier nicht veröffentlichen können, werde ich etwas vorschlagen, das Sie versuchen können, einige andere Möglichkeiten zu beseitigen.

"Numerischer Überlauf oder String -Kürzung." ist der Fehler, den Sie erhalten.

  • Hat die Abfrage? SUM() oder andere AggeGate -Funktion?
  • Hat es eine String -Manipulationsfunktion?

Wenn Sie auf einem der oben genannten Zeitpunkte einteilen, versuchen Sie, einen solchen Teil einzeln zu entfernen, und führen Sie die modifizierte Abfrage aus. Sie können also erkennen, welcher Teil der Abfrage den Fehler erzeugt.


Hinweis: Gleiche DB -Struktur, gleiche Daten und gleiche Abfrage tun nicht Erzeugen Sie immer gleiche Ergebnisse aufgrund nicht deterministischer Funktionen wie NOW() und RAND(). Wenn die Ergebnisse dieser Funktionen in weiteren Berechnungen verwendet werden, können arithmetische Fehler wie Teilung um 0 oder Überlauf oder andere Arten von Fehlern in einem Lauf und nicht in einem anderen auftreten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top