I'm building an installer for an application. The user gets to select a datasource they have configured and nominate what type of database it is. I want to confirm that the database type is indeed Oracle, and if possible, what version of Oracle they are running by sending a SQL statement to the datasource.
-
What about your programming language? This kind of question really depends on the language API for the DB access.gizmo– gizmo2008-09-19 11:29:35 +00:00Commented Sep 19, 2008 at 11:29
-
I can assume I have a JDBC datasource. If the connection fails, or the sql statement generates and error then I can certainly trap that and treat it accordingly.modius– modius2008-09-19 11:37:56 +00:00Commented Sep 19, 2008 at 11:37
Add a comment
|
12 Answers
Run this SQL:
select * from v$version;
And you'll get a result like:
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
10 Comments
Tony Andrews
All versions of Oracle I have ever used. I can't speak for Oracle 5.0 and before!
sugardaddy
This technique failed for me on Oracle 11.2.0.2.0, but I am having some login permission problems. However, for those that might be in the same boat as me, the second technique mentioned on this page by Lawrence did work: select * from product_component_version
JumpingJezza
Doesn't work if you don't have permission to v$views. Lawrence's answer has an answer for that
Atmesh Mishra
@TonyAndrews: What is the output like when select * from v$version; fails?
Tony Andrews
@AtmeshMishra: I'm not sure - maybe
ORA-00942: table or view does not exist? What do you get? |
Two methods:
select * from v$version;
will give you:
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
OR Identifying Your Oracle Database Software Release:
select * from product_component_version;
will give you:
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
6 Comments
pseudocode
Best answer since it just gives the version number only, hence no need to parse the output to extract version in an automated script.
collapsar
@omeinush Works perfectly with me (11.2.0.3 ).
jpmc26
@tjati It appears to be dependent not on the version, but on the user permissions.
V$INSTANCE is apparently not globally available by default.Draif Kroneg
It does not work on Oracle 18c: SQL> SELECT version FROM v$instance; SELECT version FROM v$instance * ERROR at line 1: ORA-00942: table or view does not exist
Marcel Stör
Requires dba privilege.
|
There are different ways to check Oracle Database Version. Easiest way is to run the below SQL query to check Oracle Version.
SQL> SELECT * FROM PRODUCT_COMPONENT_VERSION;
SQL> SELECT * FROM v$version;
Comments
The following SQL statement:
select edition,version from v$instance
returns:
- database edition eg. "XE"
- database version eg. "12.1.0.2.0"
Notes:
- select privilege on the v$instance view is of course necessary
- the edition columnn is not available pre Oracle 12.1
5 Comments
Pancho
@Prokhozhii - We now use 19 so i can no longer confirm but I would appreciate it if you could provide additional explanation as select version from v$instance definitely works in Oracle 11 . See answer stackoverflow.com/a/8135737/3051627 above. (are you 100% sure the user has access to v$instance on your database?)
Prokhozhii
SQL> select edition,version from v$instance; select edition,version from v$instance * ERROR at line 1: ORA-00904: "EDITION": invalid identifier
Jeppe Stig Nielsen
For Oracle 21, V$INSTANCE
Pancho
@Prokhozhii thanks - in the documentation "edition" is only introduced in Oracle 12.1. docs.oracle.com/database/121/REFRN/… I have updated my comment accordingly.
Here's a simple 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
/
Done.
Comments
In addition to the answer from user3362908. If your instance is down you may use following:
$ORACLE_HOME/bin/sqlplus -V
2 Comments
elmicha
That shows the version of sqlplus, not the database.
Prokhozhii
@elmicha. If you read original question you won't find the question about the database version but about Oracle (maybe database, maybe software): "what version of Oracle they are running".