Как да тествам дали моята версия на Oracle DB поддържа функцията PIVOT?

Трябва да измисля начин да определя дали Oracle е 11g или по-нов, защото по същество трябва да знам дали 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?

Благодаря!


person Steven De Groote    schedule 27.12.2012    source източник
comment
Въпреки че избраният отговор е наистина елегантен, вероятно щях да го направя по грозния начин, като използвах някои от вградените функции на Regex, малко кастинг към INT и след това сравнение.   -  person Uwe Keim    schedule 27.12.2012


Отговори (3)


Един от методите за определяне дали вашата версия на Oracle поддържа PIVOT или не е да направите заявка към V$RESERVED_WORDS, за да разберете дали запазената дума PIVOT е там или не.

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

KEYWORD
---------
PIVOT

Ако пишете код (както споменахте в коментара към отговора на @Ben, цитат 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;
person Nick Krasnov    schedule 27.12.2012
comment
Бих внимавал да използвам v$reserved_words за това. Новите функции понякога започват като недокументирани функции. Има шанс PIVOT да е била запазена дума, преди да е била наистина достъпна. Първо трябва да проверите за това в 10.2.0.5 (нямам наличен екземпляр на тази версия за тестване.) - person Jon Heller; 27.12.2012

Надявам се, че следното ще ви помогне

Проверете версията на Oracle

Идентифициране на вашата версия на софтуера за база данни на Oracle

person Sri    schedule 27.12.2012
comment
Хубави връзки! Обичайно е в Stackoverflow просто да се показва отговорът и може би връзка към отговора, ако OP иска да го следва. Отговорът ви не е грешен, но можехте да го направите по-добър. Моля, вижте отговора на Бен като пример. - person SQLMason; 27.12.2012

Малко съм объркан защо не знаете коя версия на Oracle вече използвате.

Можете обаче да използвате системния изглед PRODUCT_COMPONENT_VERSION за да получите текущата версия. Oracle препоръчва да проверите номера на текущата си версия.

select * from PRODUCT_COMPONENT_VERSION

Така че можете да видите изхода; работи и в SQL Fiddle.

person Ben    schedule 27.12.2012
comment
Трябва да определя това, защото създавам процедура, която генерира и изпълнява SQL изрази за база данни. Благодаря за помощта! - person Steven De Groote; 27.12.2012
comment
Вярвам, че отговорът на Бен отговаря най-добре на въпроса в заглавието (Каква версия на Oracle DB...). Въпреки това ИСТИНСКИЯТ въпрос, който OP задава, е Как да тествам дали моята версия на Oracle DB поддържа функцията PIVOT? - person SQLMason; 28.12.2012