Запрос для получения версии Oracle DB

#sql #oracle #version

#sql #Oracle #версия

Вопрос:

ВСЕ,

Я ищу способ получить версию сервера Oracle DB как «X.Y.Z».

Я могу использовать запрос отсюда, но он покажет версию не только сервера.

Я могу использовать v$version view, но результирующая строка будет содержать гораздо больше, чем просто «X.Y.Z».

Есть ли простой способ получить то, что я хочу?

TIA!!

Ответ №1:

SQL

 SELECT version FROM PRODUCT_COMPONENT_VERSION
 WHERE product LIKE 'Oracle Database%';
 

Результат:

 VERSION
----------
18.0.0.0.0
 

18c / 19c: VERSION_FULL также показывает установленное обновление выпуска

Просмотр ЭКЗЕМПЛЯРА V $ (требуется привилегия ВЫБОРА для ЭКЗЕМПЛЯРА SYS.V_ $):

 SELECT version FROM v$instance;
 

DBA_REGISTRY (требуется привилегия выбора в SYS.DBA_REGISTRY):

Показывает версию для каждого установленного компонента.

 SELECT * FROM dba_registry 
 WHERE comp_id = 'CATALOG';
 

PL / SQL

 DECLARE
   l_version       VARCHAR2(20);
   l_compatibility VARCHAR2(20);
BEGIN
   DBMS_UTILITY.DB_VERSION(l_version, l_compatibility);
   DBMS_OUTPUT.PUT_LINE(l_version);
END;
/
 

Результат:

 18.0.0.0.0
 

Еще короче:

 BEGIN
   DBMS_OUTPUT.PUT_LINE(DBMS_DB_VERSION.VERSION|| '.' || DBMS_DB_VERSION.RELEASE);
END;
/
 

Результат:

 18.0
 

Комментарии:

1. @ThomasKirchoff, op говорит, что SQL не PL / SQL. И третье решение дает больше, чем просто одну запись.

2. @Igor Я исправил запрос (OracleXE возвращает только одну запись). Я оставил часть PL / SQL и добавил другой способ, используя SQL.

Ответ №2:

Почему бы просто не запросить экземпляр v $?

 SQL> select version from v$instance;

VERSION
-----------------
12.2.0.1.0
 

Не нужно возиться с pl / sql или вызываемыми процедурами.

Комментарии:

1. 00942. 00000 — «таблица или представление не существует»

Ответ №3:

ВЫБЕРИТЕ * ИЗ версии v $, ГДЕ баннер ТИПА «Oracle%»;

Комментарии:

1. Я не могу его использовать — он дает гораздо больше, чем X.Y.Z