ORA-01438: значение больше указанной точности позволяет для этого столбца - PullRequest
11 голосов
/ 08 октября 2008

Иногда мы получаем следующую ошибку из базы данных нашего партнера:

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

Что может быть причиной этой ошибки?

Ответы [ 8 ]

9 голосов
/ 30 апреля 2010

Номер, который вы пытаетесь сохранить, слишком велик для поля. Посмотрите на МАСШТАБ и ТОЧНОСТЬ. Разница между ними заключается в количестве цифр перед запятой, которое вы можете сохранить.

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
6 голосов
/ 08 октября 2008

Кажется, ошибка не в одном символьном поле, а скорее в числовом. (Если бы речь шла о строковой проблеме, такой как WW, вы получили бы «слишком большое значение» или что-то подобное.) Возможно, вы используете больше цифр, чем разрешено, например. 1,000000001 в столбце, определенном как число (10,2).

Посмотрите на исходный код, упомянутый WW, чтобы выяснить, какой столбец может вызывать проблему. Затем, если возможно, проверьте данные, которые там используются.

3 голосов
/ 08 октября 2008

Это означает, что вы пытаетесь поместить что-то слишком большое в столбец. Например, у вас есть столбец VARCHAR2 (10), и вы вводите 11 символов. То же самое с номером.

Это происходит в строке 176 пакета UMAIN. Вам нужно пойти и посмотреть на это, чтобы увидеть, что это такое. Надеюсь, вы можете посмотреть это в вашем контроле исходного кода (или из user_source). Более поздние версии Oracle лучше сообщают об этой ошибке, сообщая, какой столбец и какое значение.

2 голосов
/ 08 октября 2008

В дополнение к предыдущим ответам следует отметить, что в столбце, определенном как VARCHARS (10), будет храниться 10 байт , а не 10 символов, если вы не определите его как VARCHAR2 (10 CHAR)

[Вопрос ОП, похоже, связан с числом ... это на тот случай, если у кого-то еще есть подобная проблема]

1 голос
/ 08 октября 2008

С http://ora -01438.ora-code.com / (окончательный ресурс за пределами поддержки Oracle):

ORA-01438 : значение, превышающее указанную точность, разрешенную для этого столбца
Причина : при вставке или обновлении записей было введено числовое значение, превышающее точность, определенную для столбца.
Действие : введите значение, соответствующее точности числового столбца, или используйте параметр MODIFY с командой ALTER TABLE, чтобы увеличить точность.

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

ORA-06512 : в строке string
Причина : сообщение о возврате, поскольку стек разматывается необработанными исключениями.
Действие : устранить проблему, вызвавшую исключение, или написать обработчик исключения для этого условия. Или вам может потребоваться обратиться к администратору приложения или администратору базы данных.

1 голос
/ 08 октября 2008

Одна проблема, которая у меня возникла, и это было ужасно сложно, это то, что вызов OCI для описания атрибутов столбца ведет себя по-разному в зависимости от версий Oracle. Описание простого столбца NUMBER, созданного без каких-либо предварительных или масштабных значений, возвращает разность для 9i, 10g и 11g

0 голосов
/ 27 июня 2016

FYI: Нарушения размера числового поля дадут ORA-01438: значение, превышающее указанную точность, разрешенную для этого столбца

Нарушение длины поля VARCHAR2 даст ORA-12899: слишком большое значение для столбца ...

Oracle различает типы данных столбца на основе кода ошибки и сообщения.

0 голосов
/ 30 апреля 2010

Хорошей практикой может быть определение переменных, как показано ниже:

v_departmentid departments.department_id%TYPE;

НЕ как показано ниже:

v_departmentid NUMBER(4)
...