我在一个字符串中查询了一批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();
}
}
我该怎么做?
答案 0 :(得分:0)
在teradata中,您无法一起执行DDL语句。它不是JDBC或java代码的问题 - 只是你想要使用teradata的方式。这就是错误基本上是这样说的:
http://teradataerror.com/3576-Data-definition-not-valid-unless-solitary.html
因此,您需要使用单独的请求在单独的事务中发送单独的DDL语句。如果它是多个更新并选择它将工作得很好,但创建表不能像那样执行。
我认为这是因为任何DDL请求必须在实际发生之前提交。如果你像那样使用它不是。我认为在多个命令查询中使用DDL实际上是可行的,如果它只有一个并且它是最后一个语句。