问题现象
应用报错 insert into 时 -4016,且使用了 Mybatis 框架。
关键信息
OceanBase 数据库 V3.1.2 版本 returning 报错 -4016。
问题原因
OceanBase 数据库 V3.1.2 不支持 returning 返回 DML 的结果。
可能 SQL 没有直接使用 returning into,但是 Mybatis 框架的注解会自动改写 SQL 加上这个关键字。

导致 SQL 从
insert into CFG_SERVICE ( SERVICE_ID, SERVICE_CODE, SERVICE_NAME, SYSTEM_CODE, IS_PROVIDER, PROTOCOL_ID )values( (select NVL(MAX(SERVICE_ID)+1,1) from CFG_SERVICE),?,?,?,?,? )
被改写为
insert into CFG_SERVICE ( SERVICE_ID, SERVICE_CODE, SERVICE_NAME, SYSTEM_CODE, IS_PROVIDER, PROTOCOL_ID )values( (select NVL(MAX(SERVICE_ID)+1,1) from CFG_SERVICE),?,?,?,?,? ) returning SERVICE_ID into ?
问题的风险及影响
insert 语句执行失败报错。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V3.1.2 版本。
解决方法及规避方式
解决方法:
无法解决,OceanBase 数据库 V3.1.2 版本不支持 returning 返回 DML 的结果。
规避方式:
避免使用 retruning 语句。