【发布时间】:2019-07-31 17:33:55
【问题描述】:
有关此错误消息的其他问题似乎是在执行插入或将文本转换为数字的情况下。就我而言,当我从 my_table 中选择特定数字时,我会收到错误“ORA-01722:无效数字”,而当我使用其他数字时却没有。
此代码触发错误消息:
SELECT * FROM my_table WHERE sel_num = 156396255
此代码返回预期结果(my_table 中的 1 行):
SELECT * FROM my_table WHERE sel_num = 156396320
sel_num 字段在 my_table 中定义为:
列名:sel_num,数据类型:VARCHAR2(30 字节),Null?:Y
不幸的是,我无法控制数据类型。
Oracle 声明此错误是由以下原因引起的:
“尝试将字符串转换为数字失败,因为字符串不是有效的数字文字。算术函数或表达式中只能使用数字字段或包含数字数据的字符字段。只能添加数字字段到日期或从日期中减去。”
考虑到我将数字传递给 WHERE 子句,而不是字符串,这很令人困惑。由于 VARCHAR2 数据类型,我尝试将数字作为字符串传递到查询中,这导致错误消息消失。
此代码返回一个没有错误消息的空集:
SELECT * FROM my_table WHERE sel_num = '156396255'
如果 sel_num 的这个特定值在表中不存在,这可能是一个可接受的结果,但我不确定为什么这似乎以它的方式工作。
【问题讨论】:
-
您应该将字符串与字符串进行比较,而不是数字。