查找乱码字符串的SQL

修复Oracle函数中文乱码
本文介绍了一次因设置错误导致Oracle数据库中的函数和过程内的中文字符串显示为问号的问题,并提供了解决方案。通过使用Oracle提供的正则表达式函数REGEXP_LIKE,成功定位并筛选出了所有受影响的对象。

昨天系统导数据库,一不小心把nls_language设错了,结果导出来的函数和过程里面的中文字符串中的字符都变成问号了(?)。

结果业务部门报告,好多报表里面的内容都变成问号了,这下麻烦了。

首要问题,是要把有这种问题的函数和过程找出来,但是系统中的函数和过程有好多啊,将近一千个,有人说要大家每个人分几个,用眼睛看,那可不行啊,会累死人的,哈哈。

想想办法吧,记得Oracle的函数和过程每行的文本都是存在一个系统表中的,而且,有问题的函数和过程会有一个特点,就是里面的字符串都变成了'???'的形式,只不过里面的问号的数量不一定。

那种形式正好可以让正则表达式发挥作用,而且还记得Oracle提供了正则表达式的函数呢。

确定了方向之后,说干就干,查了一下资料,所有的函数和过程都存储在User_Source这个表中。而Oracle还提供了REGEXP_Like函数。

于是就有了下面的SQL:

select distinct name, type from user_source where REGEXP_LIKE(text, '''\?{1,1000}''')

一下子就把有问题的函数和过程名都找出来了。哈哈,省了不少功夫啊。

总结一下,遇到问题的时候不要着急,不能依赖手工的工作。Oracle中的系统表和内置函数功能很强大,要充分利用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值