我尝试使用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 :(得分:0)
尝试这个作为你的陈述:
String ctas = "CREATE TABLE TARGET_DATA NOLOGGING AS (SELECT ID,
NTILE(10) OVER (ORDER BY ID) AS CONTAINER_COLUMN FROM SOURCE_DATA)";
请注意,选择部分用括号括起来。
答案 1 :(得分:0)
事实证明我没有提交我的测试数据。因此,它仍然可以在SQLDeveloper会话中看到,但对Java应用程序不可见。