【发布时间】:2020-03-09 16:13:58
【问题描述】:
以下 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 个键。
我不知道错在哪里。
【问题讨论】:
-
您确定 getResources() 和 readFileToString() 调用正在执行您期望的操作吗?考虑在 execute() 调用之前记录
sql的值。是否有可能在 execute() 内部发生异常但被捕获? -
是的,我检查了 sql 变量。它包含文件的内容。
标签: java spring oracle jdbctemplate oracle18c