17

パートナーのデータベースから次のエラーが発生することがあります。

<i>ORA-01438: value larger than specified precision allows for this column</i>

完全な応答は次のようになります。

<?xml version="1.0" encoding="windows-1251"?>
<response>
  <status_code></status_code>
  <error_text>ORA-01438: value larger than specified precision allows for this column ORA-06512: at &quot;UMAIN.PAY_NET_V1_PKG&quot;, line 176 ORA-06512: at line 1</error_text>
  <pay_id>5592988</pay_id>
  <time_stamp></time_stamp>
</response>

このエラーの原因は何ですか?

4

9 に答える 9

16

保存しようとしている数がフィールドに対して大きすぎます。スケールと精度を見てください。2つの違いは、格納できる小数点以下の桁数です。

select cast (10 as number(1,2)) from dual
             *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

select cast (15.33 as number(3,2)) from dual
             *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

下端にあるものはすべて(サイレントに)切り捨てられます

select cast (5.33333333 as number(3,2)) from dual;
CAST(5.33333333ASNUMBER(3,2))
-----------------------------
                         5.33
于 2010-04-29T23:44:26.613 に答える
7

エラーは文字フィールドのエラーではなく、数値フィールドのエラーのようです。(それが WW のような文字列の問題である場合、「値が大きすぎます」などのエラーが表示されます。) おそらく、数値 (10,2 )。

WW で言及されているソース コードを調べて、どの列が問題を引き起こしているのかを特定します。次に、そこで使用されている可能性がある場合は、データを確認します。

于 2008-10-08T04:56:20.800 に答える
3

これは、列に大きすぎるものを入れようとしていることを示しています。たとえば、VARCHAR2(10)列があり、11文字を入力しているとします。番号も同じです。

これは、パッケージUMAINの176行目で発生しています。あなたはそれが何をしているのかを見るために行ってそれを見る必要があるでしょう。うまくいけば、ソース管理で(またはuser_sourceから)それを調べることができます。Oracleの新しいバージョンでは、このエラーがより適切に報告され、どの列とどの値が示されます。

于 2008-10-08T04:35:31.280 に答える
2

以前の回答に加えて、 VARCHARS(10) として定義された列は、 VARCHAR2(10 CHAR) として定義しない限り、10 文字ではなく 10バイトを格納することに注意してください。

[OPの質問は数値に関連しているようです...これは、他の誰かが同様の問題を抱えている場合に備えてです]

于 2008-10-08T06:49:26.143 に答える
2

参考: 数値フィールドのサイズ違反により、ORA-01438: この列に許可されている指定された精度よりも大きい値が返されます

VARCHAR2 フィールド長違反により、ORA-12899: value too large for column... が返されます。

Oracle は、エラー コードとメッセージに基づいて列のデータ型を区別します。

于 2016-06-27T15:14:41.263 に答える
1

私が抱えていた問題の1つは、ひどくトリッキーでしたが、列属性を記述するためのOCI呼び出しは、Oracleのバージョンによって異なる動作をするということでした。precまたはscaleを使用せずに作成された単純なNUMBER列を記述すると、9i、10g、および11gで差異が返されます。

于 2008-10-08T05:12:30.690 に答える
1

以下のように変数を定義することをお勧めします。

v_departmentid departments.department_id%TYPE;

以下のようではありません:

v_departmentid NUMBER(4)
于 2010-04-30T02:00:39.077 に答える
1

http://ora-01438.ora-code.com/ (Oracle サポート外の決定的なリソース)から:

ORA-01438 : この列に指定された精度よりも大きな値が許可されています
原因: レコードを挿入または更新するときに、列に定義された精度を超える数値が入力されました。
処置: 数値列の精度に準拠する値を入力するか、ALTER TABLEコマンドでMODIFYオプションを使用して精度を拡張してください。

http://ora-06512.ora-code.com/ :

ORA-06512 : stringline string
原因: バックトレース・メッセージは、未処理の例外によってスタックがアンワインドされているためです。
処置: 例外の原因となっている問題を修正するか、この条件の例外ハンドラを作成してください。または、アプリケーション管理者または DBA に連絡する必要がある場合があります。

于 2008-10-08T14:00:13.263 に答える