查询获取Oracle DB版本

Igo*_*gor 15 sql oracle version

我正在寻找一种方法来获取 Oracle DB Server 版本作为“XYZ”。

我可以从这里使用查询,但它会显示不仅仅是服务器的版本。

我可以使用v$version视图,但生成的字符串将包含的不仅仅是“XYZ”。

有没有一种简单的方法可以得到我想要的东西?

Tho*_*off 23

SQL

SELECT version FROM PRODUCT_COMPONENT_VERSION
 WHERE product LIKE 'Oracle Database%';
Run Code Online (Sandbox Code Playgroud)

结果:

VERSION
----------
18.0.0.0.0
Run Code Online (Sandbox Code Playgroud)

18c/19c:VERSION_FULL还显示已安装的版本更新

查看 V$INSTANCE(需要 SYS.V_$INSTANCE 的 SELECT 权限):

SELECT version FROM v$instance;
Run Code Online (Sandbox Code Playgroud)

DBA_REGISTRY(需要 SYS.DBA_REGISTRY 的 SELECT 权限):

显示每个已安装组件的版本。

SELECT * FROM dba_registry 
 WHERE comp_id = 'CATALOG';
Run Code Online (Sandbox Code Playgroud)

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;
/
Run Code Online (Sandbox Code Playgroud)

结果:

18.0.0.0.0
Run Code Online (Sandbox Code Playgroud)

还更短:

BEGIN
   DBMS_OUTPUT.PUT_LINE(DBMS_DB_VERSION.VERSION|| '.' || DBMS_DB_VERSION.RELEASE);
END;
/
Run Code Online (Sandbox Code Playgroud)

结果:

18.0
Run Code Online (Sandbox Code Playgroud)


EdS*_*ens 5

为什么不直接查询 v$instance 呢?

SQL> select version from v$instance;

VERSION
-----------------
12.2.0.1.0
Run Code Online (Sandbox Code Playgroud)

无需浪费时间使用 pl/sql 或调用的过程。

  • 00942. 00000 - “表或视图不存在” (3认同)