如何检测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';
我正在开展一个项目,在该项目中我们可能会使用 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';