powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование неявное
9 сообщений из 9, страница 1 из 1
Преобразование неявное
    #39722600
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята всех приветствую!

Вчера наткнулись на ошибку при не явном преобразовании. Был написан запрос, в котором предикат содержал сравнение строкового значения с числовым.
Код: plsql
1.
select .... from table where function = 9



Пока функция возращала текстовое целое число, запрос работал. Как только там появилось число с плавающей точкой (5.6) сразу пошла ошибка invalid number.

Нюанс проблемы заключался в том, что выполняя запрос в pl/sql developer или жабе, ошибки не возникало, запрос отрабатывал и возвращал данные. Но вот когда он запускался из другого приложения - Oracle data integrator, появлялась вот эта ошибка.

Понятно, что оракл пытался сделать преобразование из строки в число, при сравнении числового и текстового значения.
Вопрос такой - почему при вызове из odi он падал с ошибкой, а в том же девелопере отрабатывал без проблем? Видимо, там у каждого из них есть свои форматы преобразования из одного типа в другой.
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722601
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LandgrafВидимо, там у каждого из них есть свои форматы преобразования из одного типа в другой.Нет.
RTFM Globalization Support Guide (FAQ)
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722662
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Landgraf,

А зачем вы число со строкой сравниваете? Приведите уже явно и не мучайтесь. И да, почитайте при этом ссылку RTFM выше.
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722673
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что nls_numeric_characters это позиционный параметр.
На первой позиции указывается разделитель дробной части, а на второй разделитель групп - тысячи и т.д.

Код: plsql
1.
Alter session set nls_numeric_characters = ".,"



Т.е. по хорошему внешнее приложение после того, как подключилось к базе должно выставить этот параметр. У меня два вопроса:
1) Можно ли как-то определить какое значение имеет этот параметр для сессии приложения?

2) Если приложение не устанавливает данный параметр, то он должен считать его с базы, как я понимаю. Но вот каков приоритет откуда читать это параметр - с базы, с экземпляра?

Если я не ошибаюсь, где то была статья по этой теме.
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722677
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ВоронцовLandgraf,

А зачем вы число со строкой сравниваете? Приведите уже явно и не мучайтесь. И да, почитайте при этом ссылку RTFM выше.

Код не мой, мне нужно было найти причину ошибки. Конечно, я поправил - теперь сравнивается два одинаковых типа, соответственно нет преобразования.

Просто хотелось разобраться в механизме неявного преобразования.
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722681
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LandgrafТ.е. по хорошему внешнее приложение после того, как подключилось к базе должно выставить этот параметр.Не должно. Приложение не должно зависеть от NLS.
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722714
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел на базе, в v$parameter, в качестве разделителя дробной части указана точка.
Nls_numeric_characters = ".,"

В запросе идёт сравнение "5.6" = 9. Тогда получается, что если бы внешнее приложение не устанавливало свой nls_numeric_characters, то запрос должен был отработать корректно. Но он упал на преобразовании. Таким образом можно сделать вывод, что приложение всё-таки делает установку этого параметра для своей сессии.
Не где в бд не сохраняются установки подобных параметров для сессии?
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722721
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LandgrafТаким образом можно сделать выводНе делай выводов там, где ничего не понимаешь.
RTFM Methods of Setting NLS Parameters and Their Priorities (FAQ)
...
Рейтинг: 0 / 0
Преобразование неявное
    #39722992
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Landgrafчто если бы внешнее приложение не устанавливало свой nls_numeric_characters, то
все бы пропало, так как другого нет
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование неявное
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]