ORA-01722: 无效数字

问题描述:

  在test窗口下测试自己写的一个存储过程,该过程有两个参数,文件名和需要执行的SQL语句,

   SQL语句如下:selectempno||chr(9),ename||chr(9),job||chr(9),sal||chr(9) from emp

点击执行时,提示无效数字的错误。

 

原因:

  定义存储记录的对象类型时,将sal定义成了sal number(7,2)。改为字符型如下所示:

    typecontent_record_type is record(
    empnovarchar2(25),
    enamevarchar2(25),
   job   varchar2(25),
   sal   varchar2(25));

然后问题解决。

 

分析:

将sal定义成sal number(7,2)是有根据的,因为emp表中的sal字段就是nubmer类型。

SQL> desc emp;
Name    Type        Nullable Default Comments
-------- ------------ -------- ------- --------
EMPNO   NUMBER(4)                             
ENAME   VARCHAR2(10)Y                        
JOB     VARCHAR2(9)                        
MGR     NUMBER(4)                          
HIREDATEDATE                               
SAL     NUMBER(7,2)                        
COMM    NUMBER(7,2)                        
DEPTNO  NUMBER(2)          

但是问题出在那条select语句里,selectempno||chr(9),ename||chr(9),job||chr(9),sal||chr(9) from emp;

因为进行了格式控制,所以写成了sal||chr(9),于是这个字段就变了字符串类型了。所以再给到sal变量肯定会报错!

后来在网上搜,看到这么一句话:无效数字,一般都是有无法转换为数字的字符导致。与我的分析刚好一致!所以以后要进行格式控制,要存储字段的变量都要设置成varchar2比较安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值