我正在开发一个项目,在这个项目中,我们可能会使用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将来会删除此功能。
我会查看版本。 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';