报错 报ORA-ora 017222无效数字,求大神

oracle 参数个数无效-学网-提供健康,养生,留学,移民,创业,汽车等信息
oracle 参数个数无效
round(avg(to_number(grade),1)) avg(to_number(grade),1) AVG 没写好 round( avg(to_number(grade)), 1) 看看? 'RPT_RATE_EVECTION' 参数个数或者类型错误 你看看这个包里面的参数类型和你定义的参数类型是否一致,另外你定义的参数个数和包里面的参数个数是否一致你这句sql是在oracle中用的吗?oracle总没有@ReportParameter1的用法,估计你得先将ReportParameter1转成字符串,如ReportParameter1_str=&&,再使用...begin cpgd_insert (''); 还有个问题,你insert后没提交,所以插入不到表里 insert into 后加一句 在oracle里,insert update delete后必须提交,否则插... 1.可能是程序问题 你重新装下 2.买台电脑吧 3.重装系统可能解决问题,或者找别人帮忙 4.换一个服务器 5.设置ns_lang 或者找人帮忙嘛,在网络上不一定能找到答案 . select * from user where INSTR( (select ',' || field || ',' from table_a where id = 1), ',' || TRIM(TO_CHAR(user_id )) || ',' ) & 0begin cpgd_insert (''); 还有个问题,你insert后没提交,所以插入不到表里 insert into 后加一句 在oracle里,insert update delete后必须...但在创建OracleParameter时,指定的参数名称不能使用冒号,在new OracleParameter时,ParameterName只能使用参数的字符部分 你的代码改为: cmd.Parameters.Add(new O... 名字不能用- SQL& CREATE TABLE kcxx 2 (course_code VARCHAR2(8) NOT NULL, 3 course_name VARCHAR2(30), 4 department VARCHAR2(30), 5 research_off...工号为',FNumber,'的员工姓名为',FName) FROM T_Employee WHERE FName IS NOT NULL 运行以后Oracle会报出下面的错误信息: 参数个数无效 如果要进...
您可能还关注:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
大类导航: |博客访问: 168369
博文数量: 66
博客积分: 1400
博客等级: 上尉
技术积分: 698
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
> desc t_obj&名称&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 是否为空? 类型&----------------------------------------- -------- ----------------------------&COL1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NUMBER&COL2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VARCHAR2(20)&COL3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VARCHAR2(30)
> truncate table t_
表被截断。
> insert into t_obj values (1,1,1);
已创建 1 行。
提交完成。
> 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 行。
提交完成。
> select * from t_obj where col2 =2;select * from t_obj where col2 =2&&&&&&&&&&&&&&&&&&&&&&&&& *第 1 行出现错误:ORA-01722: 无效数字
总结:根本原因是oracle隐式类型转换,是由于字符类型的字段与数字变量进行条件查询时,oracle会自动将字符的字段或者是变量自动转换为数字型,而当字段含有字符时,也就是to_number函数发生异常的时候会报ORA-01722: 无效数字错误。
阅读(43473) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
我们可以通过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
请登录后评论。Oracle报错收集
第一步:先创建两个测试表
& &第一个表:
create table test_a
id_no number
,vchar varchar2(50)
);& &第二个表:
create table test_b
id_no number
,vnum number
);第二步:往表里插入数据
insert into TEST_A (ID_NO, VCHAR)values (1, '奥特曼');
insert into TEST_A (ID_NO, VCHAR)values (2, 'WPS');
insert into TEST_A (ID_NO, VCHAR)values (3, '10');
insert into test_b (ID_NO, VNUM)values (1, 10);
insert into test_b (ID_NO, VNUM)values (2, 11);
insert into test_b (ID_NO, VNUM)values (3, 12);第三步:写出问题SQL:
select * from test_a
where vchar in (select vnum from test_b)错误原因
以前这样用没有问题的原因是,以前碰到的字段,虽然都是字符型,但是里面存的确是都是一些数字,
因此在Oracle默认转换为数字的的时候不会问题。但是这个字段里面,不仅有数字,还有中文和英文,都是实打实的
字符串,无法在默认转换的时候被转换成数字,所以就会报错无效数字。由于以前不好的习惯,导致了这个失误。甚至
会觉得自己没有错误,因为以前都是这样写的。
不能因为Oracle越来越人性化,而忽视代码书写的严谨性。严格要求自己。
正确的写法:
select * from test_a
where vchar in (select to_char(vnum) from test_b)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:709次
排名:千里之外}

我要回帖

更多关于 oracle ora 01722 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信