Как проверить, поддерживает ли моя версия БД Oracle функцию PIVOT?

Мне нужно найти способ определить, является ли Oracle 11g или новее, потому что, по сути, мне нужно знать, поддерживает ли БД, на которой я работаю, PIVOT.

Получить номер версии самому не так сложно, поэтому у меня есть:

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 или выше или даже лучше, поддерживает ли БД оператор 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