我正在使用voltdb-5.0.2并启动数据库作为voltdb create --zookeeper portno
我已经从voltdb中的java类加载了一个过程。该过程接受参数 - tableName,columnName和integer value。
这是sqlcmd行上的错误 - 当我将该过程称为 - 时 exec CheckDeleteProcedure arg1(NewTable)arg2 arg3。
VOLTDB错误:用户中止 尝试将DML adhoc sql'从NewTable中删除,其中id< =?;'从只读程序 在checkdel.CheckDeleteProcedure.run(CheckDeleteProcedure.java:56)
答案 0 :(得分: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);
我还应该提醒您有可能一次删除多条记录。我写了一篇blog post来讨论这个话题。