oracle模糊查询报错:ORA-01425 转义符必须是长度为 1 的字符串

查询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

猜你喜欢

转载自blog.csdn.net/u011048844/article/details/118190187