Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > Oracle 11 vs Oracle 12


Автор: LMM 27.06.18, 09:20
Всем здравствуйте!
Запрос простой, как шланг:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select nkl100
      from geoobject
     where to_number(substr(nkl100, 6, 3)) > 144
     order by nkl100

Поле NKL100 - строки вида 'N-37-023', 'P-35-142' etc... (номенклатуры карты масштаба 1 : 100 000).
На 11 версии всё ОК, получил список некорректных номенклатур.
На 12 версии получил ORA-01722: неверное число.

Ничего не понимаю! :wall: :wall: :wall:
Посмотрел на SQL.RU и прочих - как и ожидалось, сплошные пляски с бубном.

Вот такое:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select nkl100,
           to_number(substr(nkl100, 6, 3))
      from geoobject
     where reg_n < 1000
     order by nkl100

на 12 версии работает ОК!

И вот такое работает:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select nkl100,
           to_number(substr(nkl100, 6, 3))
      from geoobject
     where reg_n < 1000
     order by to_number(substr(nkl100, 6, 3))


:wall: :wall: :wall:

Автор: LMM 27.06.18, 10:19
Поплясал с бубном:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select nkl100,
           to_number(substr(nkl100, 6, 3))
      from geoobject
     where /*nkl100 is not null and*/ length(nkl100) = 8 and to_number(substr(nkl100, 6, 3)) > 144

и нашёл ошибку в данных! Данные внесены аж в 2004 году! Надо дома глянуть, что там для этого объекта.

Мои извинения тем, кто таки потратил на ЭТО время.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)