Как определить, поддерживает ли база данных Oracle автоинкремент? - PullRequest
0 голосов
/ 04 июля 2018

Я работаю над проектом, в котором мы можем использовать базу данных Oracle 11g или Oracle 12c в зависимости от того, что доступно в различных средах - не идеально, я знаю: (

Мой проект - приложение Spring Boot, и я использую Liquibase для управления объектами базы данных.

Моя проблема в том, что если я работаю с базой данных Oracle 12c, я бы хотел воспользоваться автоматически увеличивающимися идентификаторами, а в Oracle 11g мне придется полагаться на триггер и последовательность.

Есть ли способ определить, поддерживает ли текущая версия Oracle автоматическое увеличение или мне нужно посмотреть номер версии?

SQL, который у меня сейчас есть, работает, просто смотрит на номер версии:

SELECT
    CASE
        WHEN (TO_NUMBER(SUBSTR(version, 1, INSTR(version, '.') - 1)) >= 12) THEN
            1
        ELSE
            0
    END AS SUPPORTS_AUTO_INC
FROM
    V$INSTANCE;

Я бы предпочел иметь некоторый SQL, который проверяет, доступна ли функция ( тот же принцип при использовании функций в CSS ).

Кто знает, возможно, Oracle удалит эту функцию в будущем.

1 Ответ

0 голосов
/ 05 июля 2018

Я бы проверил версию. У Oracle действительно есть таблица V$SQL_FEATURE и таблица DBA_FEATURE_USAGE_STATISTICS, но, похоже, ни у одной из них нет записей конкретно о столбцах идентификаторов.

Вот действительно хитрый способ, которым вы могли бы сделать это ...

select decode(count(*),0,'N','Y') supports_identity_flag
from dba_tab_columns
where table_name = 'DBA_TAB_COLUMNS'
and column_name = 'IDENTITY_COLUMN';
...