2015-12-08 68 views
1

我很感兴趣,我如何才能从Oracle版本获取编号?从Oracle版本获取编号

select * from v$version where banner like 'Oracle%'; 

BANNER                   
-------------------------------------------------------------------------------- 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 


BANNER 
-------------------------------------------------------------------------------- 
    CON_ID 
---------- 
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production  
     0 
+3

V $ instance.version – Bacs

回答

2

有很多方法。

你可以在V $ INSTANCE检查VERSION观点:

SQL> SELECT version FROM V$INSTANCE; 

VERSION 
----------------- 
12.1.0.1.0 

你可以在PRODUCT_COMPONENT_VERSION检查VERSION观点:

SQL> SELECT VERSION 
    2 FROM PRODUCT_COMPONENT_VERSION 
    3 WHERE product LIKE '%Oracle Database%'; 

VERSION 
-------------------------------------------- 
12.1.0.1.0 

你可以使用DBMS_DB_VERSION包:

SQL> set serveroutput on 
SQL> BEGIN 
    2 DBMS_OUTPUT.PUT_LINE(DBMS_DB_VERSION.VERSION || '.' || DBMS_DB_VERSION.RELEASE); 
    3 END; 
    4/
12.1 

PL/SQL procedure successfully completed. 

UPDATE要得到双方的产品和版本作为单独的列,你可以这样做:

SQL> SELECT product AS edition, 
    2   version 
    3 FROM PRODUCT_COMPONENT_VERSION 
    4 WHERE product LIKE '%Oracle Database%'; 

EDITION         VERSION 
---------------------------------------- ---------- 
Oracle Database 12c Enterprise Edition 12.1.0.1.0 
+0

我在命令行获得SELECT版本FROM V $ INSTANCE 错误:7列:21 错误报告 - SQL错误:ORA-00942:表或视图不存在 00942. 00000 - “表或视图不存在” *原因: *操作: –

+0

@PeterPenzov它表示您登录的用户没有权限访问'v $ instance'视图。尝试使用SYS或SYSTEM用户。 –

+0

我如何授予此特权? –

2

只是为了好玩,使用您提交的查询:

select 
    banner, 
    regexp_substr(banner,'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*') version, 
    substr(banner,1, instr(banner,'Release')-2) edition 
from v$version 
where banner like 'Oracle%'; 

PS:我不会在常见会话中使用该版本的第五部分。其他许多人也这样做。

+0

你知道我怎么只显示数据库的版本吗? –

+0

我的查询提取。你只是玩substr和instr。 –

+0

很高兴你接受了我的答案,但我会使用'select * from PRODUCT_COMPONENT_VERSION;'作为Lalit提到的,而不是这些字符串提取:) –