使用Jdbc创建没有行的表,在Oracle上创建表作为select

时间:2018-01-09 15:57:54

标签: java spring jdbc oracle11g jdbctemplate

我尝试使用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上尝试过同样的事情,并得到相同的结果。

2 个答案:

答案 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应用程序不可见。