|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
Столкнулся с ограничением функции to_number(), которая вылетает если после цифр в номере содержатся буквы. Задача элементарная, получить номер (число, не текст) версии Оракла в котором исполняется запрос. Код: plaintext
Код: plaintext
V$VERSION не очень полезен, текст вперемешку с числами: "CORE 11.2.0.1.0 Production" Парсить исходя из одном-двух примеров негодно: сегодня он разделен табами, завтра может быть русифицирован с пробелами. Остается встроенная таблица PRODUCT_COMPONENT_VERSION: Код: plaintext 1. 2. 3. 4. 5.
Код: plsql 1.
Ошибка ORA-01722: invalid number, т.к. в числе лишние точки. Код: plsql 1.
Работает, но наверное есть что-то попроще. Во втором параметре to_number() возможно как-то сказать чтоб игнорились лишние символы после числа? Я не нашел такого. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 20:30 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQL to_number(), которая вылетает если после цифр в номере содержатся буквы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 20:34 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
Есть ещё такой интересный нюанс, как параметр COMPATIBLE. Он может не совпадать с версией ПО, но заставлять БД работать в режиме совместимости с указанной версией. Проверяется как Код: plsql 1.
И там нет лишних букв :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 21:18 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQL Задача элементарная, получить номер (число, не текст) версии Оракла в котором исполняется запрос. Медитируй на тему число и числовая строка. А так: Код: plsql 1.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:05 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQL Код: plaintext
Код: plaintext
доступны: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:13 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
SY, спасибо за отличный пример с этими инлайн функциями, я совсем про них забыл ввиду недоступности в 11м оракле. В принципе, я могу их сделать и глобальными, если будут использоваться в нескольких местах. Я посмотрел как другие справляются с поведением to_number(), которое строго требует точного формата. Есть несколько решений, среди них: - "DEFAULT ON CONVERSION ERROR", тоже фишка появилась в 12.0 - regexp_substr - отмывание чисел после которых идет текст - написание более спокойной функции, которая выдает null вместо исключений Один DBA так и поступил, взято отсюда: http://oracle.ehelp365.com/oracle-to_number Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 07:47 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQL, В чем, собственно, смысл, если важно 4е число, особенно в случае 12.1.0.1/12.1.0.2? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 12:57 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQL, Ну и причем тут поведение to_number()??? У тебя конкретная задача получить версию и релиз. Версия это строка следующего формата: This is a text description of admin002.gif. The figure displays a release number and notes the significance of each digit. The release number is 11.2.0.1.0. The significance of each number (reading from left to right) is as follows: 11 is the major database release number 2 is the database maintenence release number 0 is the application server release number 1 is the component-specific release number 0 is the platform-specific release number End of image description. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 13:35 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
SY, Так еще лучше. Меня интересовали первые два числа версии, поэтому собирался прочитать его как десятичную дробь, благо есть удобная функция to_number() которая это умеет. Третий параметр regexp_substr - это для меня новая штука, выглядит очень удобно. Вопрос по поводу Код: plsql 1.
с пробелом: у меня в 11.2 тоже пробел, хотя Оракл не предоставляет никаких гарантий по инвариантности этой строки. В моем примере я подстраховался и использовал Код: plsql 1.
, хотя trim() было бы лучше. Почитав еще документацию производителя ( https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_dbver.htm) и примеры использования, я убедился что рекомендуемый способ проверки соответствия версии это через встроенный пакет DBMS_DB_VERSION. Если в будущем процессе миграции на новый оракл мне потребуется различать между версиями, я буду знать как это делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 19:05 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
Мои вопросы в этой теме отвечены, подытожу: Документация оракла рекомендует использовать пакет констант DBMS_DB_VERSION, который содержит номера версии в виде целых чисел, удобных для использования в PL/SQL. Там же приводятся примеры использования. https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/d_dbver.htm При необходимости доступиться к этим числам из запроса, можно обернуть интересующие значения как глобальные функции, или, начиная с Оракла 12, как инлайн функции - примеры есть в этой теме (Спасибо, SY). Мой второй вопрос был как научить to_number() читать строчки с лишней информацией не вылетая по исключению. Поведение этой функции через малодокументируемый второй параметр изменить нельзя, и требуется предварительная чистка строки ввода. Среди тех, кто решал эту задачу до меня и рассказал на интернете, канонического решения не наблюдается. Кто-то чистит через regex_substr(), кто-то написал безопасную версию функции - все рабочие варианты. Например условия в C/C++: Код: plaintext 1. 2.
в PL/SQL можно написать так: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 19:34 |
|
Версия Оракла как number
|
|||
---|---|---|---|
#18+
НеофитSQLЕсли в будущем процессе миграции на новый оракл мне потребуется различать между версиями Обычно это не требуется. Просто пишешь нужную версию в системных требованиях твоего поделия. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 20:03 |
|
|
start [/forum/topic.php?fid=52&fpage=37&tid=1880908]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 135ms |
0 / 0 |