如何检测Oracle数据库是否支持自动增量?

时间:2018-07-04 19:38:31

标签: oracle auto-increment feature-detection

我正在一个项目中,根据不同环境中的可用情况,我们可能正在使用Oracle 11g或Oracle 12c数据库-我知道这不是很理想:(

我的项目是Spring Boot应用程序,我正在使用Liquibase来管理数据库对象。

我的问题是,如果我在Oracle 12c数据库上运行,我想在Oracle 11g上利用自动递增ID的优势,那么我将不得不依靠触发器和序列。

是否可以检测当前版本的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 :(得分:1)

我会检查版本。 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';