2012-12-27 70 views
4

我需要找出一種方法來確定Oracle是否爲11g或更新版本,因爲基本上我需要知道我運行的數據庫是否支持PIVOT。如何測試我的Oracle DB版本是否支持PIVOT功能?

獲取版本號ifself並不難,所以我有:

select * from v$version 

不幸的是,這並不能給出一個簡單的數字,但是5個記錄,包括叮咬和各種不同的版本號:

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi 
PL/SQL Release 10.2.0.5.0 - Production 
CORE 10.2.0.5.0 Production 
TNS for Linux: Version 10.2.0.5.0 - Production 
NLSRTL Version 10.2.0.5.0 - Production 

那麼,有沒有辦法確定我的Oracle是否11g或更高,或者甚至更好,如果DB支持PIVOT語句?

謝謝!

+0

雖然選擇的答案是真的優雅,我可能會通過使用一些內置的正則表達式的功能,一些鑄造爲INT,然後進行比較的做過的醜陋的方式。 –

回答

7

作爲確定您的Oracle版本是否支持PIVOT的一種方法是查詢V$RESERVED_WORDS視圖以確定保留字PIVOT是否存在。

SQL> select keyword 
    2 from v$reserved_words 
    3 where keyword = 'PIVOT' 
    4 ; 

KEYWORD 
--------- 
PIVOT 

如果你正在編寫一個代碼,是要採取的版本優勢,你可以(和它的優選的特定功能(如你在給@本的答案,報價I'm creating a procedure that generates and executes SQL statements for a datamart註釋中)方法)使用dbms_db_version包進行條件編譯。例如:

create or replace some_proc 
is 
begin 
    $if dbms_db_version.ver_le_10_2 -- for example 
    $then 
    -- features up to 10g r2 version 
    $else 
    -- current release 
    $end 
end; 
+0

我會小心使用'v $ reserved_words'來做到這一點。新功能有時會以未公開的功能開始。在真正可用之前,PIVOT有可能是一個保留字。你應該首先在10.2.0.5中檢查這個(我沒有可用的版本的實例來測試。) –

2
+1

不錯的鏈接!在Stackoverflow上習慣性地顯示答案,如果OP想要遵循它,可能還需要鏈接到答案。你的「答案」沒有錯,但你可以做出更好的答案。作爲一個例子,請看[Ben's answer](http://stackoverflow.com/a/14057301/630284)。 – SQLMason

2

我有點困惑,爲什麼你會不知道你使用的是什麼版本的Oracle的了。

但是,您可以使用系統視圖PRODUCT_COMPONENT_VERSION來獲取當前版本。這是Oracle建議的check your current release number

select * from PRODUCT_COMPONENT_VERSION 

所以你可以看到輸出;它的工作原理也是SQL Fiddle

+0

那麼我需要確定,因爲我正在創建一個爲數據集市生成並執行SQL語句的過程。謝謝您的幫助! –

+0

我相信Ben的回答最好的回答了題目中的問題(「什麼版本的Oracle DB ......」)。然而,OP所問的真正問題是「如何測試我的Oracle DB版本是否支持PIVOT功能?」 – SQLMason

相關問題