一、错误类型及描述
1、错误类型
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
用T1的A字段与T2的B字段关联就会出现“无效数字”
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会自动把数字字符串转为数字,表T2如下
如果不确定某字段是否具有非数字字符串,可以用distinct来查询,有时候要注意NULL值和空格字符,因为看起来是一样的,但是点空格字符会发现有空格
b、日期字段原本就是varchar2类型,再用TO_CHAR就会出现错误
c、数字不能乘以数字字符外的其他字符(NULL除外)
SELECT 5*' ' FROM DUAL;
d、表名是ods.oa_formtable_main_818,但是写成ods._oa_formtable_main_818,不小心在前面多加一横就会出错。
二、解决方法
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来截取。
今天的文章ora01036 非法的变量名 编号_报错无效数字分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51457.html