Oracle数据库新建表格SESSION_CALLINFO,表中status和intime字段均为number类型,没有添加数据。Mybatis在执行下面sql时报错java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字。
select CALLUUID from SESSION_CALLINFO where STATUS=0 and INTIME >=#{startTime} and INTIME <=#{endTime}
开始以为是status没有设置默认值的问题,改成nvl(STATUS,0)=0之后依然报错。后来检查发现startTime和endTime传递的都是String类型,而Oracle在where后做匹配“字段(number类型)=某值”会自动调用TO_NUMBER()方法对值进行转换,因此传入字符串会报错,将传入的字段改为long类型之后恢复正常。