ORACLE报”ORA-01722:无效数字”的错误

ORACLE报”ORA-01722:无效数字”的错误一、错误类型及描述1、错误类型2、错误描述a、关联表之后出现“无效数字”b、日期转为字符类型出现“无效数字”c、数字乘以空格出现“无效数字”(需要特别注意空格字符)d、表名写错出现"无效数字"3、错误原因a、数字不能与非数字字符外的其他字符关联(NULL除外)

大家好,欢迎来到IT知识分享网。

一、错误类型及描述

1、错误类型

ORACLE报"ORA-01722:无效数字"的错误

 

2、错误描述

a、关联表之后出现“无效数字”

b、日期转为字符类型出现“无效数字”

c、数字乘以空格出现“无效数字”

(需要特别注意空格字符)

d、表名写错出现”无效数字”

 

3、错误原因

a、数字不能与非数字字符外的其他字符关联(NULL除外)

SELECT * FROM (SELECT 1 a FROM DUAL)T1 LEFT JOIN (SELECT 'abd' b,'value' c FROM DUAL)T2 ON T1.A=T2.B

表T1                                      表T2

ORACLE报"ORA-01722:无效数字"的错误                 ORACLE报"ORA-01722:无效数字"的错误

用T1的A字段与T2的B字段关联就会出现“无效数字”

ORACLE报"ORA-01722:无效数字"的错误

SELECT * FROM (SELECT 1 a FROM DUAL)T1 LEFT JOIN (SELECT '10' b,'value' c FROM DUAL)T2 ON T1.A=T2.B

当T2的B字段值为 ’10’就不会这样的问题

ORACLE报"ORA-01722:无效数字"的错误

因为ORACLE会自动把数字字符串转为数字,表T2如下

ORACLE报"ORA-01722:无效数字"的错误

如果不确定某字段是否具有非数字字符串,可以用distinct来查询,有时候要注意NULL值和空格字符,因为看起来是一样的,但是点空格字符会发现有空格

 

b、日期字段原本就是varchar2类型,再用TO_CHAR就会出现错误

c、数字不能乘以数字字符外的其他字符(NULL除外)

SELECT 5*' ' FROM DUAL;

ORACLE报"ORA-01722:无效数字"的错误

d、表名是ods.formtable,但是写成ods._formtable,不小心在前面多加一横就会出错。

 

二、解决方法

 1、对于a、c种错误原因,当数字与字符串类型的字段进行关联或者乘除操作时,要注意字符类型应为“数字字符”,或者通过case when 把非数字字符的值改为null

SELECT * FROM (SELECT 1 a FROM DUAL)T1 LEFT JOIN (SELECT 'abd' b,'value' c FROM DUAL)T2 ON T1.A=(case when regexp_like (t2.b,'([^.0-9])+') then null else t2.b end)
SELECT 5*(case when regexp_like (' ','([^.0-9])+') then null end)a FROM DUAL;

 

2、注意查看字段原本类型,如果日期字段原本就是字符类型,通过to_char转换成字符类型就会出错,可以通过substr来截取。

3、注意查看表名。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30116.html

(0)
上一篇 2023-10-13 21:00
下一篇 2023-10-23 10:15

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信