MyBatis @Update注解执行失败,报ORACLE错误ORA-00933
ORA-00933错误排查:MyBatis Update语句问题
问题场景
在传统Spring Boot应用的Mapper中,编写了如下更新语句:
@Update("UPDATE MY_TABLE SET STATUS_CODE=#{status} WHERE ID_DOC=#{idDoc};") void updateStatus(@Param("status") final String status,@Param("idDoc") final BigDecimal idDoc);
执行该方法时返回ORA-00933: SQL 命令未正确结束错误,但相同的SQL语句在SQLPLUS中可正常运行。
问题原因
问题出在SQL语句末尾的分号;上。
MyBatis处理注解形式的SQL时,会将语句直接传递给Oracle JDBC驱动执行,但Oracle的JDBC驱动会把分号当作SQL语句的一部分解析,导致语法错误。而SQLPLUS作为Oracle官方命令行工具,会自动识别并剔除语句末尾的分号,不会将其传递给数据库引擎,因此能正常执行。
解决方法
直接去掉SQL语句末尾的分号即可:
@Update("UPDATE MY_TABLE SET STATUS_CODE=#{status} WHERE ID_DOC=#{idDoc}") void updateStatus(@Param("status") final String status,@Param("idDoc") final BigDecimal idDoc);
内容的提问来源于stack exchange,提问作者ciro
相关产品推荐
相关产品推荐

