【发布时间】:2018-06-18 17:13:00
【问题描述】:
我正在尝试使用 Spring 的 JdbcTemplate 在 Oracle 11g 命令上执行 CTAS。
private void ctasTest(JdbcTemplate jdbcTemplate) {
String ctas = "CREATE TABLE TARGET_DATA NOLOGGING AS SELECT ID,
NTILE(10) OVER (ORDER BY ID) AS CONTAINER_COLUMN FROM SOURCE_DATA";
jdbcTemplate.execute(ctas);
}
针对新数据库运行时,会创建 TARGET_DATA 表,但即使 SOURCE_DATA 表有 1000 行,也有 0 行。
如果我随后使用 SQLDeveloper 删除空的 TARGET_DATA 表,并运行相同的命令,则成功,该表包含 1000 行。
然后我可以删除表并重新运行我的 Java 代码,它会成功并且 TARGET_DATA 将包含 1000 行。
SQLDeveloper 是否在后台提供了一些我需要包含在我的 Java 代码中的东西。我在普通的 JDBC 和 Oracle 12c 上尝试过同样的事情,得到了同样的结果。
【问题讨论】:
-
有什么例外吗?
-
无异常,代码完成无错误。
-
那么,你是说它根本没有创建表吗??
-
目标表已创建,但有 0 行。
-
你可以运行
SELECT ID, NTILE(10) OVER (ORDER BY ID) AS CONTAINER_COLUMN FROM SOURCE_DATA看看你是否得到了行吗?我敢肯定,您正在使用相同的用户来获取 java 代码中的数据
标签: java spring jdbc oracle11g jdbctemplate