报错现场还原
一个批量入库的sql自己测试的时候正常,在线上报了
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-01790: 表达式必须具有与对应表达式相同的数据类型
原来的sql是这样写的
insert into
(
CID,
TS,
PHONE,
NUM_PACKAGE,
COST_MONTHPRICE,
COST_PRICE,
ONLINE_TIME,
LOG_TIME
)
select
#{item.cid},
#{item.ts},
#{item.phone},
#{item.numPackage},
#{item.costMonthprice},
#{item.costPrice},
#{item.onlineTime},
sysdate
from dual
其中onlineTime
字段在现场有空的情况,怀疑未加jdbcType=DATE的情况下mybatis将这个字段置为了''空串。
insert into
(
CID,
TS,
PHONE,
NUM_PACKAGE,
COST_MONTHPRICE,
COST_PRICE,
ONLINE_TIME,
LOG_TIME
)
select
#{item.cid,jdbcType=INTEGER},
#{item.ts,jdbcType=INTEGER},
#{item.phone,jdbcType=VARCHAR},
#{item.numPackage,jdbcType=VARCHAR},
#{item.costMonthprice,jdbcType=VARCHAR},
#{item.costPrice,jdbcType=VARCHAR},
#{item.onlineTime,jdbcType=DATE},
sysdate
from dual
我记得这个jdbcType有时还会引发索引失效的问题,所以以后还是都带上这个配置吧。