本人初学oracle 的小菜鸟,有个需求要将15位的身份证号码转为18位,于是上网搜索,用了百度文库里的第一个FUN_PID15TO18()。
实际执行过程中,弹出错误

错误指向
FOR i IN 1 .. 17 LOOP
v_check_number := to_number(substr(result, i, 1)) * v_factor(i) +
v_check_number;
END LOOP;
个人猜测是因为15位的身份证中存在非数字字符,导致to_number失败。
请教该如何处理该异常,假设我原15位的身份证为输入参数pid15,那么我希望实现如下逻辑:
1、如果pid15能成功转为18位身份证,则返回18位身份证
2、如果不能,则返回原值(pid15)