Я получаю эту ошибку: ORA-01438: значение больше указанной точности, разрешенной для этого столбца

#sql #oracle

Вопрос:

У меня в таблице базы данных есть столбец с номером типа(5,3). Мне нужно иметь возможность вставлять данные или обновлять данные в этот столбец. В настоящее время я использую поле формы, которое позволяет пользователям вводить любое число, которое они хотят. Это поле используется при вставке или обновлении данных в этот столбец типа Номер(5,3). При тестировании я ввожу любое число и получаю следующую ошибку: ORA-01438: значение больше указанной точности, разрешенной для этого столбца

Я знаю, что НОМЕР типа данных(5,3) означает, что 5-это точность (общее количество цифр), а 3-шкала (количество цифр справа от десятичной точки). Например: 52.904

Есть ли в oracle функция для форматирования любого числа в число такого типа: ЧИСЛО(5,3)?

Опять же, я хотел бы, чтобы пользователь ввел любое число в поле и смог обработать это число как ЧИСЛО(5,3) для вставки или обновления в мою таблицу.

Комментарии:

1. Что-то не имеет смысла. Есть ли веская причина для ограничения столбца в его нынешнем виде? Если есть веская причина, то пользователям не следует разрешать вводить «любое число» — если они введут число, например 3500, они должны получить сообщение об ошибке. В противном случае вы можете изменить столбец, чтобы он принимал больший диапазон чисел (например, измените его на число(10,3), если вы хотите разрешить до семи цифр в целочисленной части).

2. @mathguy Я не могу изменить тип данных столбца. Это для устаревшего приложения, и я уже спрашивал об этом, но у меня не было разрешения.

3. Хорошо, но тогда тот, кто не дает вам разрешения, должен понимать, что число, подобное 100, не может быть сохранено в этом столбце. Период. Нет никакого обходного пути, никаких исключений и т. Д. Лучшее, что вы можете сделать, — это отправить сообщение об ошибке обратно пользователям, когда они пытаются ввести значения, которые им не подходят number(5, 3) . Обратите внимание, что если в их числах слишком много десятичных знаков, Oracle округлит значение до трех знаков после запятой — это не проблема. Проблема заключается в том, что целочисленная часть имеет три или более цифр.

4. @mathguy Спасибо за помощь!

Ответ №1:

Вы могли бы использовать что-то вроде этого: выберите cast (512.33333333 в качестве числа(5,2)) из dual;