FireBirdDBは、バックアップDBができる間に手順を実行できません
-
24-10-2019 - |
質問
ここでデータベースで問題が発生しました。Firebird1.5.3を使用していますが、NOEが通常の方法で読み書きするまで正常に機能しますが、手順を実行すると、空白の行の結果と次のメッセージが表示されました。
算術例外、数値オーバーフロー、または弦の切り捨て。
SQLコード:-802 IBエラー番号:335544321
そこで、1か月前にバックアップDBと比較しましたが、うまくいきました。コードが変更されないようにするために、両方の手順をWinmerge(Diff Camparer)でコピーしますが、違いはありません。データからエラーが発生したことを確認するために、古い日付のトランザクション(1年前のデータ)の手順を実行しますが、それでもそれらのメッセージが表示されます。
手順で動作論理を確認し、変更しますが、運はありません。誰かがこれを手伝うことができましたか?
Thx a Bunch、
解決
コードとデータを長い間追跡した後、私はどういうわけか私を悩ませている障害を見つけました。現在、Longgerキャラクター(Varchar)があるマスターデータに変更がありました。私の手順では、Varcharのサイズが小さく、10文字などに入れられました。新しい文字列その15.ここにエラーが発生します ...または弦楽器の切り捨て..... 。しかし、とにかく私の問題へのあなたの注意とあなたが書いた手がかりに感謝します、それはどういうわけか私を救い、それをたどるという考えを与えてください。
Thx a Bunch、
他のヒント
まったく同じデータを持つ異なる動作(バックアップDBおよびLive One)は奇妙です。おそらく、他の手順やトリガーがライブDBでのクエリをいじり合っています。
ここでコードを公開できないと言うので、他の可能性を排除しようとすることをお勧めします。
「数値オーバーフロー、または弦楽刈り。」 あなたが得るエラーです。
- クエリにはありますか
SUM()
または他のアグゲート機能? - 文字列操作機能はありますか?
上記のいずれかで「はい」の場合は、そのような部分を1つずつ削除して、変更されたクエリを実行してください。そのため、クエリのどの部分がエラーを生成するかを見つけることができます。
注:同じDB構造、同じデータ、同じクエリ いいえ 非決定的な機能のために、常に同じ結果を生み出します NOW()
と RAND()
. 。これらの関数の結果がさらなる計算で使用される場合、0またはオーバーフローまたは他のタイプのエラーなどの分割などの算術エラーがある実行で発生し、別の実行では発生しません。