oracle mybatis一次执行多条sql,提示SQL命令未正确结束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle mybatis一次执行多条sql,提示SQL命令未正确结束相关的知识,希望对你有一定的参考价值。

### The error occurred while setting parameters
### SQL: alter session force parallel query parallel 8;select * from c_tbtranslateconfig where intdel=0;alter session disable parallel query;
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
mybaits: mybatis-spring-boot-starter:1.3.2
oracle驱动包:com.oracle.ojdbc6:11.2.0.4
问题是:每条sql结尾带分号就报同样错误,单条sql的也是

对于MyBatis连接Oracle数据库、分两种环境:

1、SQL上下文就是不允许分号结尾,你都发现规律了

2、PL/SQL上下文可以批量而且必须带分号结尾:

begin
alter session force parallel query parallel 8;
select * from c_tbtranslateconfig where intdel=0;
alter session disable parallel query;
end;

把上文作为整个字符串传给MyBatis即可,但问题是select查询不赋值取值就没意义了。

也许你可以试下:

select * /*+parallel(t,8)*/ from c_tbtranslateconfig t where intdel=0;

参考技术A 我也遇到了同样的问题,语句是正常的,我找了一下原因 是mybatis的这个useGeneratedKeys属性的问题,
官网的解释是
允许 JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。
我写成了这样就不报错了
<insert id="saveOperatorAuthorityLink" parameterType="java.util.List" useGeneratedKeys="false">追问

这是select,不是insert,而且即使是单条sql后面加分号结束也会报同样错误

springboot+Mybatis+MySql 一个update标签中执行多条update sql语句

MySql默认是不支持这种骚操作的,但是并不代表不能实现,只需要在jdbc的配置文件中稍做配置:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/airipo?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username=imp
password=123

其中,allowMultiQueries=true这个配置是关键,必须写

然后在映射文件中的标签下将多条sql用;隔开即可,示例代码:

<insert id="addUser" parameterType="User" >
      insert into t_users (name,password,phone) values (#name, #password,#phone);
      insert into t_dep (depname) values (#depname)
 </insert>

<update id="updateBatchSingle"  parameterType="java.util.List">
  <foreach collection="list" item="item" index="index" open="" close=";" separator=";">
    update user
    <set>
      status=#item.status
    </set>
    where id = #item.id
  </foreach>
</update>

以上是关于oracle mybatis一次执行多条sql,提示SQL命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章

mybatis一次执行多条SQL语句

Java-mybatis-一次执行多条SQL语句

如何在Oracle中一次执行多条sql语句

Oracle中怎样一次执行多条sql语句

(学)如何在Oracle中一次执行多条sql语句

sql 一次插入多条记录