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

如何检测Oracle数据库是否支持自动增量?,oracle,auto-increment,feature-detection,Oracle,Auto Increment,Feature Detection,我正在从事一个项目,在该项目中,我们可能会使用Oracle 11g或Oracle 12c数据库,具体取决于在各种环境中可用的数据库--我知道这并不理想:( 我的项目是一个Spring启动应用程序,我使用Liquibase来管理数据库对象 我的问题是,如果我在Oracle 12c数据库上运行,我希望利用自动递增的ID,而在Oracle 11g上,我将不得不依赖触发器和序列 是否有办法检测当前版本的Oracle是否支持自动递增,或者是否需要查看版本号? 我目前使用的SQL有效,它只查看版本号: SE

我正在从事一个项目,在该项目中,我们可能会使用Oracle 11g或Oracle 12c数据库,具体取决于在各种环境中可用的数据库--我知道这并不理想:(

我的项目是一个Spring启动应用程序,我使用Liquibase来管理数据库对象

我的问题是,如果我在Oracle 12c数据库上运行,我希望利用自动递增的ID,而在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将来会删除这个功能。

我会检查这个版本。Oracle确实有一个
V$SQL\u功能
表和一个
DBA\u功能(u USAGE\u STATISTICS
表,但两个表似乎都没有任何专门关于标识列的条目

这里有一个非常愚蠢的方法,你可以做到这一点


您可以尝试使用autoincrement创建,如果失败,则捕获错误并返回到序列/触发器版本-使用动态SQL或从您的控制层。但这似乎不令人满意。有两个版本并让用户选择在安装期间使用哪个版本不是更简单吗?我真的不希望有太多或任何用户参与部署过程中的操作。我们的部署人员都是些白痴。这绝对是一个累赘,但它确实有效。我将由其他人在工作中运行此功能…我们可能只使用这个:p
select decode(count(*),0,'N','Y') supports_identity_flag
from dba_tab_columns
where table_name = 'DBA_TAB_COLUMNS'
and column_name = 'IDENTITY_COLUMN';