查询varchar2类型正确,但当查询字段是nvarchar2时,报错了
ORA-01425 转义符必须是长度为 1 的字符串
sql如下
select * from TEST where BB like '%11%' ESCAPE '/';
网上查到的原因说是oracle 的bug,但是博主的数据库是oracle11g,并非9i
这是什么原因造成的呢?
如果改用likec+to_char又可以
select * from TEST where BB likec '%11%' ESCAPE to_char('/');
显然这只是一个变通的解决办法。后来在 https://www.thinbug.com/q/51129119 中找到了答案。可以看到如下一段内容。
尝试把CURSOR_SHARING设置为EXACT
alter session set cursor_sharing=exact;
然后执行上面的sql,居然没有报错了。
然后马上查看了修改前的配置,发现是 FORCE。这个坑了,oracle安装默认是EXACT的,怎么就成了FORCE了(然而并不会有人承认o(╥﹏╥)o)
最终全局修改,解决问题
alter system set cursor_sharing=EXACT scope=both;
猜想是共享游标设置为force时的bug,而并非是ESCAPE 的bug