|
|
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
Ребята всех приветствую! Вчера наткнулись на ошибку при не явном преобразовании. Был написан запрос, в котором предикат содержал сравнение строкового значения с числовым. Код: plsql 1. Пока функция возращала текстовое целое число, запрос работал. Как только там появилось число с плавающей точкой (5.6) сразу пошла ошибка invalid number. Нюанс проблемы заключался в том, что выполняя запрос в pl/sql developer или жабе, ошибки не возникало, запрос отрабатывал и возвращал данные. Но вот когда он запускался из другого приложения - Oracle data integrator, появлялась вот эта ошибка. Понятно, что оракл пытался сделать преобразование из строки в число, при сравнении числового и текстового значения. Вопрос такой - почему при вызове из odi он падал с ошибкой, а в том же девелопере отрабатывал без проблем? Видимо, там у каждого из них есть свои форматы преобразования из одного типа в другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 08:39 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
LandgrafВидимо, там у каждого из них есть свои форматы преобразования из одного типа в другой.Нет. RTFM Globalization Support Guide (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 08:50 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
Landgraf, А зачем вы число со строкой сравниваете? Приведите уже явно и не мучайтесь. И да, почитайте при этом ссылку RTFM выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 10:31 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что nls_numeric_characters это позиционный параметр. На первой позиции указывается разделитель дробной части, а на второй разделитель групп - тысячи и т.д. Код: plsql 1. Т.е. по хорошему внешнее приложение после того, как подключилось к базе должно выставить этот параметр. У меня два вопроса: 1) Можно ли как-то определить какое значение имеет этот параметр для сессии приложения? 2) Если приложение не устанавливает данный параметр, то он должен считать его с базы, как я понимаю. Но вот каков приоритет откуда читать это параметр - с базы, с экземпляра? Если я не ошибаюсь, где то была статья по этой теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 10:50 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
Павел ВоронцовLandgraf, А зачем вы число со строкой сравниваете? Приведите уже явно и не мучайтесь. И да, почитайте при этом ссылку RTFM выше. Код не мой, мне нужно было найти причину ошибки. Конечно, я поправил - теперь сравнивается два одинаковых типа, соответственно нет преобразования. Просто хотелось разобраться в механизме неявного преобразования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 10:58 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
LandgrafТ.е. по хорошему внешнее приложение после того, как подключилось к базе должно выставить этот параметр.Не должно. Приложение не должно зависеть от NLS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 11:00 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
Посмотрел на базе, в v$parameter, в качестве разделителя дробной части указана точка. Nls_numeric_characters = ".," В запросе идёт сравнение "5.6" = 9. Тогда получается, что если бы внешнее приложение не устанавливало свой nls_numeric_characters, то запрос должен был отработать корректно. Но он упал на преобразовании. Таким образом можно сделать вывод, что приложение всё-таки делает установку этого параметра для своей сессии. Не где в бд не сохраняются установки подобных параметров для сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 11:44 |
|
||
|
Преобразование неявное
|
|||
|---|---|---|---|
|
#18+
LandgrafТаким образом можно сделать выводНе делай выводов там, где ничего не понимаешь. RTFM Methods of Setting NLS Parameters and Their Priorities (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2018, 11:53 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39722721&tid=1883287]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 374ms |

| 0 / 0 |
