我如何确认一个数据库是Oracle和它使用SQL的版本?

我正在构build一个应用程序的安装程序。 用户可以select他们已经configuration的数据源,并指定它是什么types的数据库。 我想确认数据库types确实是Oracle,如果可能,通过向数据源发送SQL语句来运行它们的Oracle版本。

运行这个SQL:

select * from v$version; 

你会得到如下结果:

 BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production PL/SQL Release 10.2.0.3.0 - Production CORE 10.2.0.3.0 Production TNS for Solaris: Version 10.2.0.3.0 - Production NLSRTL Version 10.2.0.3.0 - Production 

两种方法:

 select * from v$version; 

会给你:

 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production PL/SQL Release 11.1.0.6.0 - Production CORE 11.1.0.6.0 Production TNS for Solaris: Version 11.1.0.6.0 - Production NLSRTL Version 11.1.0.6.0 - Production 

或者识别您的Oracle数据库软件版本 :

 select * from product_component_version; 

会给你:

 PRODUCT VERSION STATUS NLSRTL 11.1.0.6.0 Production Oracle Database 11g Enterprise Edition 11.1.0.6.0 64bit Production PL/SQL 11.1.0.6.0 Production TNS for Solaris: 11.1.0.6.0 Production 
 SQL> SELECT version FROM v$instance; VERSION ----------------- 11.2.0.3.0 

你可以使用

 SELECT * FROM v$version; 

要么

 SET SERVEROUTPUT ON EXEC dbms_output.put_line( dbms_db_version.version ); 

如果你不想分析v $ version的输出。

如果您的实例已closures,请在alert.log中查找版本信息

或者另一种粗暴的方法是查看Oracle二进制文件,如果在Linux上托pipeDB,则尝试使用Oracle二进制文件中的string。

 strings -a $ORACLE_HOME/bin/oracle |grep RDBMS | grep RELEASE 

如果您有权限,可以使用VIEWV$VERSION

 SELECT VERSION FROM V$INSTANCE; 

对于Oracle使用:

 Select * from v$version; 

对于SQL服务器使用:

 Select @@VERSION as Version 

和MySQL的使用:

 Show variables LIKE "%version%"; 

这是一个简单的function:

 CREATE FUNCTION fn_which_edition RETURN VARCHAR2 IS /* Purpose: determine which database edition MODIFICATION HISTORY Person Date Comments --------- ------ ------------------------------------------- dcox 6/6/2013 Initial Build */ -- Banner CURSOR c_get_banner IS SELECT banner FROM v$version WHERE UPPER(banner) LIKE UPPER('Oracle Database%'); vrec_banner c_get_banner%ROWTYPE; -- row record v_database VARCHAR2(32767); -- BEGIN -- Get banner to get edition OPEN c_get_banner; FETCH c_get_banner INTO vrec_banner; CLOSE c_get_banner; -- Check for Database type IF INSTR( UPPER(vrec_banner.banner), 'EXPRESS') > 0 THEN v_database := 'EXPRESS'; ELSIF INSTR( UPPER(vrec_banner.banner), 'STANDARD') > 0 THEN v_database := 'STANDARD'; ELSIF INSTR( UPPER(vrec_banner.banner), 'PERSONAL') > 0 THEN v_database := 'PERSONAL'; ELSIF INSTR( UPPER(vrec_banner.banner), 'ENTERPRISE') > 0 THEN v_database := 'ENTERPRISE'; ELSE v_database := 'UNKNOWN'; END IF; RETURN v_database; EXCEPTION WHEN OTHERS THEN RETURN 'ERROR:' || SQLERRM(SQLCODE); END fn_which_edition; -- function fn_which_edition / 

完成。