在一个查询java中执行批处理DDL语句

时间:2017-10-26 11:33:26

标签: java jdbc

我在一个字符串中查询了一批sql命令,

 String SQLQuery =

"CREATE VOLATILE TABLE v1;
CREATE VOLATILE TABLE v2;

INSERT INTO v1;
//do stuff
INSERT INTO v2;
//do stuff
UPDATE xx;
//do stuff

DROP TABLE v1;
DROP TABLE v2;"

我尝试使用executeUpdate(),executeBatch()执行它们,它们都失败了java jdbc客户端,它在Teradata客户端中运行。

 Error mesg:
 [TeraJDBC 15.10.00.35] [Error 3576] [SQLState 25000] Data definition not valid unless solitary.

Java代码:

    PreparedStatement stmt10 = null;
    try {

        stmt10 = conn.prepareStatement(SQLQuery);
        //stmt10.executeUpdate();
        stmt10.executeBatch();
        //conn.commit();

    } catch (Exception ex) {
        throw new Exception(ex.getMessage());
    } finally {
        if (stmt10 != null) {
            stmt10.close();
        }
    }

我该怎么做?

1 个答案:

答案 0 :(得分:0)

在teradata中,您无法一起执行DDL语句。它不是JDBC或java代码的问题 - 只是你想要使用teradata的方式。这就是错误基本上是这样说的:

http://teradataerror.com/3576-Data-definition-not-valid-unless-solitary.html

因此,您需要使用单独的请求在单独的事务中发送单独的DDL语句。如果它是多个更新并选择它将工作得很好,但创建表不能像那样执行。

我认为这是因为任何DDL请求必须在实际发生之前提交。如果你像那样使用它不是。我认为在多个命令查询中使用DDL实际上是可行的,如果它只有一个并且它是最后一个语句。