同事做查询接口的时候,遇到一个bug,错误信息是:
ORA-00932: inconsistent datatypes: expected - got CLOB
这个看起来就很玄乎了,不过似乎和clob有关。百度了一下,都说是clob在定义sql的xml文件里面,不能直接像VARCHAR来用,应该用to_char做转换。问题是,我们并没有写xml,而是使用了tk.mybatis的通用mapper,这就很奇怪了。转战Stack Overflow,找到了正确的错误原因描述:
clob字段,不能像varchar那样在where语句内使用,而是需要用to_char转换后再放到where语句,和在不在xml文件里没有关系,而是在哪都得用to_char转一下。
即:
aClobField = 'xxx' --这种写法是错误的
to_char(aClobField) = 'xxx' --正确的写法,使用to_char转换后再放在where语句
而我们看tk.mybatis的通用mapper的源码就能发现,tk.mybatis是通过动态拼接sql语句来实现数据库查询的。