web-dev-qa-db-de.com

ORA-01438: Wert größer als angegebene Genauigkeit lässt diese Spalte zu

Manchmal erhalten wir folgende Fehlermeldung aus der Datenbank unseres Partners:

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

Die vollständige Antwort sieht wie folgt aus:

<?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>

Was kann die Ursache für diesen Fehler sein?

11
user11104

Die Nummer, die Sie speichern möchten, ist zu groß für das Feld. Schau dir die SKALA und die PRÄZISION an. Der Unterschied zwischen den beiden ist die Anzahl der Stellen vor der Dezimalstelle, die Sie speichern können.

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

Alles am unteren Ende wird abgeschnitten (still) 

select cast (5.33333333 as number(3,2)) from dual;
CAST(5.33333333ASNUMBER(3,2))
-----------------------------
                         5.33
9
Gary Myers

Der Fehler scheint kein Zeichenfeld zu sein, sondern eher ein numerisches. (Wenn es sich um ein Zeichenkettenproblem handelt, das wie WW erwähnt wird, erhalten Sie einen 'Wert zu groß' oder etwas Ähnliches.) Möglicherweise verwenden Sie mehr Ziffern als zulässig, z. 1,000000001 in einer Spalte, die als Nummer (10,2) definiert ist.

Sehen Sie sich den Quellcode als WW an, um herauszufinden, welche Spalte das Problem verursachen könnte. Überprüfen Sie anschließend die dort verwendeten Daten, falls möglich.

6
Thorsten

Dies zeigt an, dass Sie versuchen, etwas zu großes in eine Spalte zu schreiben. Beispielsweise haben Sie eine VARCHAR2 (10) -Spalte und geben 11 Zeichen ein. Gleiches mit Nummer.

Dies geschieht in Zeile 176 des Pakets UMAIN. Sie müssten sich das mal ansehen, um zu sehen, was es vorhat. Hoffentlich können Sie es in Ihrer Quellcodeverwaltung nachschlagen (oder von user_source). Spätere Versionen von Oracle melden diesen Fehler besser und sagen Ihnen, welche Spalte und welchen Wert.

3
WW.

Neben den vorherigen Antworten sollten Sie beachten, dass eine als VARCHARS (10) definierte Spalte 10 Bytes und nicht 10 Zeichen speichert, sofern Sie sie nicht als VARCHAR2 (10 CHAR) definieren.

[Die Frage des OP scheint auf die Anzahl bezogen zu sein ... dies ist nur für den Fall, dass andere Personen ein ähnliches Problem haben.]

2
cagcowboy

Von http://ora-01438.ora-code.com/ (die definitive Ressource außerhalb des Oracle-Supports):

ORA-01438: Wert größer als die angegebene Genauigkeit für diese Spalte
Cause : Beim Einfügen oder Aktualisieren von Datensätzen wurde ein numerischer Wert eingegeben, der die für die Spalte definierte Genauigkeit überschritt.
Aktion : Geben Sie einen Wert ein, der der Genauigkeit der numerischen Spalte entspricht, oder erweitern Sie die Genauigkeit mit der Option MODIFY mit dem Befehl ALTER TABLE.

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

ORA-06512: an der Zeichenfolge
Cause : Nachricht zurückverfolgen, da der Stapel durch nicht behandelte Ausnahmen abgewickelt wird.
Aktion : Beheben Sie das Problem, das die Ausnahme verursacht, oder schreiben Sie einen Ausnahmebehandler für diese Bedingung. Oder wenden Sie sich an Ihren Anwendungsadministrator oder an den DBA.

1
warren

Ein Problem, das ich hatte, und es war furchtbar schwierig, war, dass der OCI-Aufruf zum Beschreiben von Spaltenattributen sich je nach Oracle-Version unterschiedlich verhält. Das Beschreiben einer einfachen NUMBER-Spalte, die ohne Vorkürzel oder Skalierung erstellt wurde, gibt den Unterschied zwischen 9i, 10g und 11g zurück

1
Robert Gould

FYI: Numerische Feldgrößenverletzungen ergeben ORA-01438: Wert größer als die für diese Spalte angegebene zulässige Genauigkeit

VARCHAR2-Feldlängenverletzungen ergeben ORA-12899: Wert zu groß für Spalte ...

Oracle unterscheidet zwischen den Datentypen der Spalte basierend auf dem Fehlercode und der Nachricht.

0
Priyome

Es empfiehlt sich, die folgenden Variablen zu definieren:

v_departmentid departments.department_id%TYPE;

NICHT wie unten:

v_departmentid NUMBER(4)
0
gokhant