我如何确认一个数据库是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
如果您有权限,可以使用VIEW
或V$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 /
完成。