@sisharpacc
Всем спасибо за помощь!

Oracle: как узнать на какой строчке ошибка?

Есть поле varchar, в котором числа в разных форматах. Не для всех значений срабатывает ф-я TO_NUMBER. Понятно, что где-то ошибка с запятой или другая, но как найти эти значения, для которых ф-я не срабатывает?
  • Вопрос задан
  • 3581 просмотр
Решения вопроса 1
@Geny
я бы что - то такое сделал:
begin
  .... // преобразование
exception when others then 
  dbms_output.put_line(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE());
end;

и посмотрел на какой строке ошибка...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Если на скорую руку, то создаете процедуру, в которой курсором перебираете ваше поле, вызывая для него to_number. Если не выполняется, то в dbms_ouput.put_line выводите id записи с этим полем.
Ответ написан
Комментировать
@medotkato
Другой вариант на скорую руку в декларативном духе без pl/sql таков.
To_number отталкивается от формата числовых значений, определенных Вашими настройками NLS.
Для российских локализаций разделитель дробной части, как правило, запятая.
Значит, надо искать строки с иными символами (не цифры и не запятая) в этом поле либо с более чем одной запятой (и то, и другое - ошибка).

Например, для разделителя-запятой так (c регулярками проще):
select * from your_table where regexp_like ( your_varchar_field , '([^,0..9])|(,.*,)' )

Конечно, если у Вас там не "AusDollars" в качестве обозначения валюты (см. "to_number" на docs.oracle.com).

Если разделитель не запятая, меняем на другой символ по аналогии.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы