ora01036 非法的变量名 编号_报错无效数字

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

一、错误类型及描述

1、错误类型

ora01036 非法的变量名 编号_报错无效数字

 

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

ora01036 非法的变量名 编号_报错无效数字                 ora01036 非法的变量名 编号_报错无效数字

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

ora01036 非法的变量名 编号_报错无效数字

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’就不会这样的问题

ora01036 非法的变量名 编号_报错无效数字

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

ora01036 非法的变量名 编号_报错无效数字

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

 

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

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

SELECT 5*' ' FROM DUAL;

ora01036 非法的变量名 编号_报错无效数字

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

(0)
编程小号编程小号
上一篇 2023-09-01
下一篇 2023-09-01

相关推荐

发表回复

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