ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 客户编号分配中,PL/SQL类型自动转换问题

客户编号分配中,PL/SQL类型自动转换问题

原创 Linux操作系统 作者:regonly1 时间:2012-01-10 10:35:22 0 删除 编辑
plsql中,case when语句和decode存在类似的类型隐式转换处理。
映射的值会根据第一个值的类型进行隐式转换,也就是说,如果第一个值是数值型,
则后续也会转换成数值型。因此,如果后面某个值是非数字值则会出现转型错误。比如下面的情况:
declare
    v_retval varchar2(100);
    p_content varchar2(100) := '军12312422';
    p_dcval   varchar2(100) := '-';
begin
    v_retval := case length(p_content)
                when 15 then mod(substr(p_content, 15, 1), 2)
                when 18 then mod(substr(p_content, 17, 1), 2)
                else p_dcval
                end;
end;
会出现下面错误:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 9
因为前面两个做了mod处理后,系统默认为是数值型值了。但是遇到p_dcval发现是'-',是非数字型
无法转换,因此报错。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-714653/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1070052