2008-10-08 1 views
10

Wir bekommen manchmal den folgenden Fehler aus unserer Partner-Datenbank:ORA-01438: Wert, der größer als der angegebenen Genauigkeit ermöglicht dieser Spalte

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

+0

Anzeigen http://stackoverflow.com/questions/14357816/ora-01438-value-larger-than-specified-precision-allowed-for-this-column-when – Kiquenet

Antwort

3

Dies zeigt an, dass Sie versuchen, etwas zu groß in eine Spalte zu bringen. Zum Beispiel haben Sie eine VARCHAR2 (10) Spalte und Sie geben 11 Zeichen ein. Das gleiche gilt für die Nummer.

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

6

Der Fehler scheint nicht zu einem Zeichenfeld zu gehören, sondern eher zu einem numerischen Feld. (Wenn es ein String-Problem wäre, wie WW erwähnt, würde man einen "Wert zu groß" oder etwas Ähnliches bekommen.) Wahrscheinlich verwenden Sie mehr Ziffern als erlaubt sind, z. 1,000000001 in einer Spalte definiert als Nummer (10,2).

Sehen Sie sich den Quellcode als WW an, um herauszufinden, welche Spalte das Problem verursacht. Dann prüfen Sie möglichst die Daten, die dort verwendet werden.

1

Ein Problem, das ich hatte, und es war schrecklich schwierig, war, dass die OCI-Aufruf zur Beschreibung einer Spalte Attribute abhängig von Oracle-Versionen unterschiedlich verhält. Beschreibt eine einfache Zahl Spalte erstellt ohne prec oder Waage kehrt differenlty auf 9i, 1OG und 11g

2

Weitere zur vorherigen Antworten sollten Sie beachten, dass eine Spalte als VARCHAR definiert (10) 10 speichert Bytes, nicht mehr als 10 Zeichen es sei denn, Sie es als VARCHAR2 (10 CHAR) definieren

[die Frage des OP scheint Zahl bezogen zu werden ... dies nur für den Fall ist jemand ein ähnliches Problem hat]

1

von http://ora-01438.ora-code.com/ (die endgültige Ressource außerhalb Oracle Support):

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

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

ORA-06512: bei Leitdraht String
Ursache: Backtrace Nachricht als Stapel von unbehandelten Ausnahmen abgewickelt wird.
Aktion: Beheben Sie das Problem, das die Ausnahmebedingung verursacht, oder schreiben Sie einen Ausnahmebehandler für diese Bedingung. Möglicherweise müssen Sie sich auch an Ihren Anwendungsadministrator oder DBA wenden.

9

Die Nummer, die Sie speichern möchten, ist zu groß für das Feld. Schau dir die SCALE und PRECISION an. Der Unterschied zwischen den beiden ist die Anzahl der Ziffern 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, was am unteren Ende abgeschnitten wird (leise)

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

Eigentlich ist das untere Ende nicht abgeschnitten, aber in Oracle gerundet: Wählen Sie Besetzung (5.66666666 als Anzahl (3,2)) aus Dual; -> Rückgabe 5.67 –

0

Es könnte eine gute Praxis Variablen zu definieren wie folgt:

v_departmentid departments.department_id%TYPE; 

NICHT unten mögen:

v_departmentid NUMBER(4) 
0

FYI: Numerische Feldgröße Verletzungen wird ORA-01438 geben: Wert, der größer als die angegebene Genauigkeit für diese Spalte erlaubt

VARCHAR2 Feldlänge Verletzungen geben ORA-12899: Wert zu groß für Spalte ...

Oracle macht eine Unterscheidung zwischen den Datentypen der Spalte basierend auf dem Fehlercode und der Nachricht.

Verwandte Themen