У меня есть два 12c (12.1.0.2.0) базы данных Oracle, один из которых возвращает 'ok'
для следующего запроса (с использованием SQL Developer 3.2.20.10), в то время как другие результаты в ORA-01722: invalid number
:Oracle NVL недействительный номер
select 'ok' from dual where 1 = nvl(1, 'X');
документация Oracle для NVL
говорит:
If expr1 is numeric, then Oracle determines which argument has the highest numeric precedence, implicitly converts the other argument to that datatype, and returns that datatype.
значения NLS_COMP
, NLS_SORT
и NLS_LANGUAGE
одинаковы между двумя базами данных, поэтому они не должны быть Кау пейте разницу в числовом приоритете двух аргументов. Что может быть разным между этими двумя базами данных, чтобы заставить один возвращать 'ok'
, а другой - к ошибке?
они одни и те же версии, они на тот же сервер, вы подключаетесь к ним через одного и того же клиента с одного и того же компьютера клиента? – kevinsky
Они оба 12.1.0.2.0 (соответствует версии сервера и клиента). Они находятся на разных серверах. В обоих случаях я подключаюсь к SQL Developer 3.2.20.10. Однако я не подключаюсь к ним с одного и того же клиентского ПК. – hmqcnoesy
Я проверил тест и «выберите nvl (1, '1') из двойных« работает », но« выберите nvl (1, «X») из двойного «нет». Согласно документам oracle он никогда не должен работать, если первый параметр является числовым, а второй параметр не может быть представлен как число. – OldProgrammer