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