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: 无效数字错误。