valor que precisión permite para ora mayor esta especificada columna column sql database oracle plsql ora-01438

sql - ora-01438: valor mayor que el que permite la precisión especificada para esta columna



ORA-01438: el valor mayor que la precisión especificada permite esta columna (8)

Además de las respuestas anteriores, debe tener en cuenta que una columna definida como VARCHARS (10) almacenará 10 bytes , no 10 caracteres a menos que lo defina como VARCHAR2 (10 CHAR)

[La pregunta del OP parece estar relacionada con el número ... esto es solo en caso de que alguien más tenga un problema similar]

A veces recibimos el siguiente error de la base de datos de nuestro socio:

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

La respuesta completa es similar a la siguiente:

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

¿Cuál puede ser la causa de este error?


Desde http://ora-01438.ora-code.com/ (el recurso definitivo fuera del soporte de Oracle):

ORA-01438 : valor mayor que la precisión especificada permitida para esta columna
Causa : al insertar o actualizar registros, se ingresó un valor numérico que superó la precisión definida para la columna.
Acción : ingrese un valor que cumpla con la precisión de la columna numérica, o use la opción MODIFICAR con el comando ALTERAR TABLA para expandir la precisión.

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

ORA-06512 : en una cadena de línea de referencia
Causa : Mensaje de traza inversa ya que la pila se desenrolla por excepciones no controladas.
Acción : solucione el problema que causa la excepción o escriba un manejador de excepciones para esta condición. O puede necesitar contactar al administrador de su aplicación o DBA.


El error parece no ser uno de un campo de caracteres, sino más bien uno numérico. (Si fuera un problema de cadena como WW mencionado, obtendría un ''valor demasiado grande'' o algo similar). Probablemente esté usando más dígitos de los permitidos, por ejemplo, 1,000000001 en una columna definida como número (10,2 )

Mire el código fuente como lo mencionó WW para descubrir qué columna puede estar causando el problema. Luego, verifique los datos, si es posible, que se estén utilizando allí.


Un problema que tuve, y fue terriblemente complicado, fue que la llamada de OCI para describir los atributos de una columna se comporta de manera diferente dependiendo de las versiones de Oracle. La descripción de una simple columna NÚMERO creada sin prec o escala devuelve la diferencia en 9i, 1Og y 11g


El número que intentas almacenar es demasiado grande para el campo. Mire la ESCALA y la PRECISIÓN. La diferencia entre los dos es la cantidad de dígitos por delante del lugar decimal que puede almacenar.

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

Cualquier cosa en el extremo inferior se trunca (silenciosamente)

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


Puede ser una buena práctica definir variables como a continuación:

v_departmentid departments.department_id%TYPE;

NO como a continuación:

v_departmentid NUMBER(4)


Esto indica que estás tratando de poner algo demasiado grande en una columna. Por ejemplo, tiene una columna VARCHAR2 (10) y está poniendo 11 caracteres. Lo mismo con el número.

Esto está sucediendo en la línea 176 del paquete UMAIN. Tendría que ir y echar un vistazo a eso para ver qué se trata. Esperemos que pueda buscarlo en su control de origen (o desde user_source). Las versiones posteriores de Oracle informan mejor este error, diciéndole qué columna y qué valor.


FYI: las infracciones del tamaño de campo numérico darán ORA-01438: valor mayor que la precisión especificada permitida para esta columna

Las violaciones de longitud de campo de VARCHAR2 darán ORA-12899: valor demasiado grande para la columna ...

Oracle hace una distinción entre los tipos de datos de la columna en función del código de error y el mensaje.