Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251042
  • 博文数量: 59
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 698
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 21:17
文章分类

全部博文(59)

文章存档

2009年(14)

2008年(45)

我的朋友

分类: Oracle

2009-01-02 10:37:09

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

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

上一篇:潜在的性能问题

下一篇:前台应用ora-01114

给主人留下些什么吧!~~

ixora2009-01-04 21:06:49

我们可以通过10053事件来跟踪下该sql的解析过程。 alter session set events = '10053 trace name context forever,level 1'; 10053 事件详细记录了每条sql语句详细的执行过程。 得到dump文件后,我们可以通过tkprof工具,对其进行格式化,最终可以搞清楚错误产生的根本原因。 开启跟踪事件 Alter session set events '10053 trace name context forever,level {1/2}'; 关闭: Alter session set events '10053 trace name context off'; 在开启跟踪事件后,我们可以执行相应需要跟踪的sql,然后再关闭跟踪信息。 跟踪文件中发现如下文件 ******* UNPARSED QUERY IS ******* SELECT "TEST"."A" "A" FROM "XTA8"."TEST" "TEST" WHERE TO_NUMBER("TEST"."A")=23