首页 > 解决方案 > 无法通过 JDBC 禁用 Oracle 外键

问题描述

以下 SQL 脚本在我的 SQL 开发人员中完美运行:

begin
  for c in (select * from user_constraints where constraint_type = 'R' and status = 'ENABLED')
  loop
    dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
  end loop;
end;

当使用 Spring JdbcTemplate 执行相同的脚本时,什么也没有发生:

String sql = null;
try {
sql = FileUtils.readFileToString(resourceLoader.getResource("classpath:sql/DisableContraints.sql").getFile(), Charset.defaultCharset());
} catch (IOException e) {
   exceptionHandler.handleException("DisableContraints.sql not loaded.", e);
}
jdbcTemplate.execute(sql);

当我尝试选择外键时,会出现同样的奇怪行为:select * from user_constraints where constraint_type = 'R' and status = 'ENABLED'. SQL-Developer 返回 32 个键,JDBC 返回 0。但是当我选择所有键 ( select * from user_constraints where status = 'ENABLED') SQL-Developer 和 JDBC 返回 68 个键。

我不知道错误在哪里。

标签: javaspringoraclejdbctemplateoracle18c

解决方案


也许您有不同的用户/模式?

试试也许:

select * from dba_constraints where constraint_type = 'R' and status = 'ENABLED' and owner = 'MYSCHEMA';

不要忘记所有者检查,您不想禁用SYSTEM- 检查。


推荐阅读