我搜索了一些与使用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 [
先谢谢
答案 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提供至少一个这样的详细信息。