0

我正在使用 voltdb-5.0.2 并将数据库作为 voltdb create --zookeeper portno 启动

我已经从 voltdb 中的 java 类加载了一个过程。该过程接受参数 - tableName、columnName 和整数值。

这是 sqlcmd 行上的错误 - 当我将过程称为 - exec CheckDeleteProcedure arg1(NewTable) arg2 arg3。

VOLTDB 错误:用户中止尝试排队 DML adhoc sql '从 NewTable 中删除,其中 id <=?;' 从 checkdel.CheckDeleteProcedure.run(CheckDeleteProcedure.java:56) 的只读程序

4

1 回答 1

0

感谢您添加该详细信息。

voltQueueExperimental() 方法是不支持的实验性功能。

该过程在编译时被归类为只读,因为它不包含任何涉及写入的编译时常量 SQLStmt 对象。在运行时,您会收到此错误,因为不允许只读过程进行任何写入。涉及写入的过程以不同方式处理(两阶段提交等)。

您可以从客户端界面将这个 DELETE 语句作为 Ad Hoc 查询运行。

另一种选择是,如果您希望此过程处理少量表,则为每个表声明单独的 SQLStmt 对象。就制作 SQLStmt 的编译时常量而言,这很好:

final String sql1 = "DELETE FROM ";
final String sql2 = " WHERE col1 <= ?;";
final SQLStmt qry1 = new SQLStmt(sql1 + "EMPLOYEE" + sql2);
final SQLStmt qry2 = new SQLStmt(sql1 + "DEPT" + sql2);

我还应该警告您可能一次删除许多记录。我写了一篇关于该主题的博客文章。

于 2015-03-18T16:08:32.043 回答