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

How to detect if Oracle database supports auto increment?

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

我的项目是一个 Spring 引导应用程序,我正在使用 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 将来会删除此功能。

我会检查版本。 Oracle 确实有一个 V$SQL_FEATURE table 和一个 DBA_FEATURE_USAGE_STATISTICS table,但它们似乎都没有任何专门关于标识列的条目。

这里有一个非常矫揉造作的方法,你可以做到这一点...

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