我正在一个项目中,根据不同环境中的可用情况,我们可能正在使用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将来会删除此功能。
答案 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';