1

DB2 ( V8 ) ストアド プロシージャの実行中に、次のエラーが発生します。

SQL0304N 値がホスト変数のデータ・タイプの範囲内にないため、ホスト変数に値を割り当てることができません。SQLSTATE=22003

トレースや特定のエラー処理を一切設定していません。エラーは、私が操作できないクライアントの検証環境でのみ発生するため、多くのオプションはありませんが、コードを再度分析します。

これが私の現在の分析結果です。Googleはあまり役に立ちません...

私の「10ページ」手順は、一連のデータに対してCURSORを作成し、それを調べて、テーブルに挿入する各要素の値を計算します。

すべての変数の型と、それらを埋めるために使用されるデータ型、およびターゲットテーブルのデータ型を (うまくいけば) チェックしましたが、競合は見られません。

10 進数、掛け算、足し算がたくさんあるので、私の唯一の仮説は、定義された変数に対して計算値が大きくなりすぎるということです。それが「正しいエラー」であることを誰かが確認できますか?また、計算によって生成された小数点以下の桁数が、対象の変数の型 (たとえば、100000.123 in decimal(6,2)) で許可されているよりも大きい場合にも適用されますか?

また、クライアントを介して db2 pl sql をデバッグする方法を見つけようとしましたが、解決策が見つかりませんでした。何か提案があれば...

手がかりを事前に感謝します:)

4

1 に答える 1

1

自分で答える…

まず、私の最後の質問 => クライアントを介して db2 pl sql をデバッグする方法が見つかりませんでした (少なくとも DB2 V8 を使用)。

統合クライアントの環境で作業する権限が与えられた後、自分の仮説が正しいことを確認できました。乗算を受け取る変数の形式が、計算結果に対して小さすぎる場合がありました (decimal(10,2))。

採用された解決策は、変数形式を decimal(15,2) に変更することでした。挿入する最終的な値は、クライアントの要件に応じてまだ decimal(10,2) である必要があったため、クライアントで次のことを検証しました。

1-変数値を確認します :

if (myval > 9999999,99)
then 
  set myval = 9999999,99;
end if; 

=> "decimal(10,2) 要件に戻る"

2-Get back to decimal(10,2) at insert : この最後のコードは、小数点以下の桁数が多すぎる場合の問題も解決します。それは挿入時にもエラーを引き起こしていました

insert into mytable values (
... ,
CAST(myval AS DECIMAL( 12 , 2 )),
...
)
于 2012-09-06T14:14:29.183 に答える