ORA-01722:无效数字

 

ANTIPER@ANTIPER > desc t_obj
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER
 COL2                                               VARCHAR2(20)
 COL3                                               VARCHAR2(30)
ANTIPER@ANTIPER > truncate table t_obj;
表被截断。
ANTIPER@ANTIPER > insert into t_obj values (1,1,1);
已创建 1 行。
ANTIPER@ANTIPER > commit;
提交完成。
ANTIPER@ANTIPER > select * from t_obj where b =2;
select * from t_obj where b =2
                          *
第 1 行出现错误:
ORA-00904: "B": 标识符无效

ANTIPER@ANTIPER > select * from t_obj where col2 =2;
未选定行
ANTIPER@ANTIPER > select * from t_obj where col2 =2;
未选定行
ANTIPER@ANTIPER > insert into t_obj values (1,'b',1);
已创建 1 行。
ANTIPER@ANTIPER > commit;
提交完成。
ANTIPER@ANTIPER > select * from t_obj where col2 =2;
select * from t_obj where col2 =2
                          *
第 1 行出现错误:
ORA-01722: 无效数字
 
总结:根本原因是oracle隐式类型转换,是由于字符类型的字段与数字变量进行条件查询时,oracle会自动将字符的字段或者是变量自动转换为数字型,而当字段含有字符时,也就是to_number函数发生异常的时候会报ORA-01722: 无效数字错误。

你可能感兴趣的:(ORA-01722:无效数字)