1

ここでデータベースに問題が発生しました。Firebird1.5.3を使用しており、通常の方法で読み取りまたは書き込みを行うまでは問題なく動作しますが、プロシージャを実行すると、空白の行の結果と次のメッセージが表示されます。

算術例外、数値オーバーフロー、または文字列の切り捨て。

SQLコード:-802 IBエラー番号:335544321

そのため、1か月前にバックアップデータベースと比較しましたが、問題なく機能し、データを行で取得しました。コードが変更されていないことを確認するために、WinMerge(差分比較)で両方の手順をコピーして貼り付けますが、違いはありません。エラーがデータに起因することを確認するために、古い日付のトランザクション(1年前のデータ)に対してプロシージャを実行しましたが、それでもこれらのメッセージが表示されます。

手順の中でアリトメティックロジックをチェックし、変更しますが、運がありません。誰かがこれを手伝うことができましたか?

たくさんのThx、

4

2 に答える 2

1

コードとデータを長い間トレースした後、私はどういうわけか私を悩ませている障害を見つけました。より長い文字(varchar)を持つマスターデータに変更がありました。私の手順では、それを小さいサイズのvarchar、たとえば10文字に入れました。新しい文字列は約15ですが、エラーが発生します...または文字列の切り捨て....。しかし、とにかく私の問題に注意を向けてくれてありがとう、そしてあなたが書いた手がかりに感謝して、それはどういうわけか私を救ってくれます、それを追跡するアイデアを私に与えてください。

たくさんのThx、

于 2011-03-22T02:56:05.777 に答える
0

まったく同じデータでの異なる動作(バックアップデータベースとライブデータベース)は奇妙です。おそらく、他のプロシージャまたはトリガーがライブデータベースのクエリを台無しにしている可能性があります。

ここではコードを公開できないとおっしゃっていますので、他の可能性を排除するためにできることを提案します。

「数値オーバーフロー、または文字列の切り捨て。」あなたが得るエラーです。

  • クエリにはSUM()、または他の集約機能がありますか?
  • 文字列操作機能はありますか?

上記のいずれかで「はい」の場合は、そのような部分を1つずつ削除して、変更されたクエリを実行してください。したがって、クエリのどの部分でエラーが発生するかを見つけることができます。


注:となどの非決定論的関数のため、同じdb構造、同じデータ、同じクエリで常に同じ結果が得られるとは限りませ。これらの関数の結果が以降の計算で使用される場合、0による除算やオーバーフローなどの算術エラー、または他のタイプのエラーが1つの実行で発生し、別の実行では発生しない可能性があります。NOW()RAND()

于 2011-03-18T08:44:10.917 に答える