菜鸟求教简单异常处理

allright1199 2014-05-05 03:30:41
本人初学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)
...全文
197 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2014-05-05
  • 打赏
  • 举报
回复
exception when value_error then ........................
善若止水 2014-05-05
  • 打赏
  • 举报
回复
有字符x的情况的,楼主是必须考虑的。依据我个人的了解,15位的身份证的年是后两位,比如14,18位的年是四位,比如2014。
RUMBLE_ZHENG 2014-05-05
  • 打赏
  • 举报
回复
不要这样生搬硬套,看看具体算法,对含有X字符的特殊处理。 如果你真想能转就转,不能转返回原值。那么需要异常捕获,在异常处理里面返回原值就行。
allright1199 2014-05-05
  • 打赏
  • 举报
回复
33082107212211X 3308210816222XX 33082105012215X 查了一下,应该是上面这些错误数据导致的

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧