我写了个函数,对某个字段进行转换。比如把15位的身份证号码变成18位。现在库里有800W数据,大部分是好的。但是有些字段的15位身份证号码是乱输的,比如有汉字、有标点符号、有空格等等各种乱七八糟的东西。这样的话,我执行 update TA set sfz=to18(SFZ) WHERE 1=1 总出错。说函数执行错误。有没有办法能把那些错误的记录找出来?这只是个例子。我是说,有没有办法在执行函数时,把导致函数执行错误的记录找出来。

解决方案 »

  1.   

    你可以在函数里面先对数据进行验证,如果数据容许就做update,否则就跳过,这个时候你可以把这些记录保存到其他地方去,至于你说的那种通用的方法,好像还没有听说过
      

  2.   

    修改函数to18(SFZ),在函数内部进行判断,错误记录信息打出来,dbms_output
    身份证,可以用to_number()判断,
    或者在外面调用函数时判断函数的返回值,将你需要的记录信息打出来
      

  3.   

    支持1楼的想法,oracle里面出错之后过程就会中断,而不像Java之类可以捕捉之后继续运行,
    所以用exception when貌似行不通,不如写一个验证函数比较好。
      

  4.   

    select * from tablename 
    where nvl(length(regexp_substr(身份证ID,'[^1234567890$]')),0) > 0
    找出那些格式不对的行,
    或者使用上面的where条件删除掉它们。