使用MyBatis执行多个DB2语句

时间:2017-07-17 06:38:24

标签: db2 mybatis

我搜索了一些与使用Mybatis执行多个SQL语句相关的帖子。但那没用。我需要在MyBatis中执行多个DB2语句。考虑我必须运行3个DELETE语句

我在下面提到了链接。在这篇文章中,他们用ORACLE为Mybatis提供了示例。

MyBatis executing multiple sql statements in one go, is that possible?

查询语法:

<delete id="clearTable" parameterType="test">
    DELETE FROM tableA WHERE key = #{key} 

    DELETE FROM tableb WHERE key = #{key} and param = #{param}

    DELETE FROM tablec WHERE key = #{key}  and param = #{param}
<delete>

错误日志:

Translating SQLException with SQL state '42601', error code '-199', message [[SQL0199] Keyword DELETE not expected. Valid tokens: OR USE SKIP WAIT WITH.]; SQL was [] for task [

更新数据库时出错。原因:java.sql.SQLException:[SQL0199]关键字DELETE不期望。有效代币:或使用SKIP WAIT WITH。

SQL:DELETE FROM tableA WHERE key =? DELETE FROM tableb WHERE key =?和param =?从tablec中删除WHERE键=?和param =?

原因:java.sql.SQLException:[SQL0199]不期望关键字DELETE。有效代币:或使用SKIP WAIT WITH。

先谢谢

1 个答案:

答案 0 :(得分:1)

MyBatis似乎期望其SQL语句有一行。我不使用MyBatis,但我使用的是DB2。尝试调用存储过程(并将其传递给要删除的项的键值),或尝试匿名阻止。

begin atomic
   DELETE FROM tableA WHERE key = 1  ;

   DELETE FROM tableb WHERE key = 2 and param = 1 ;

   DELETE FROM tablec WHERE key = 3  and param = 1 ;
end@

以上语法对DB2 Linux / Unix / Windows当前版本(v10.5或v11.1)有效 - 您可以使用MyBatis(或其他)参数标记替换文字值。 一个细节是上面的语法有两个分隔符,一个是语句分隔符(在我的例子中是@),另一个是语句内分隔符(在我的例子中是;),DB2允许你配置这两个分隔符,因此在从MyBatis打开连接时,您可能需要以某种方式向DB2提供至少一个这样的详细信息。