查找乱码字符串的SQL

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

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

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

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

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

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

于是就有了下面的SQL:

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

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

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

你可能感兴趣的:(oracle,sql,工作,正则表达式)