[英]Invalid number SQL error
我有这样的声明。 虽然我可以在Oracle 11g中执行此语句并查看结果。 但是我的朋友(他也使用Oracle 11g)无法执行此语句。 他收到无效的号码错误。 我不明白为什么。 你可以帮帮我吗? 他还尝试将upper_threshold强制转换为varchar,但没有用。
select *
from table
where (lower_threshold <> to_char( 0) or upper_threshold = 0 or upper_threshold is null)
lower_threshold具有varchar类型,上限阈值为整数值。
Oracle尝试ORA-01722: invalid number
当我们尝试将非数字值转换为数字数据类型时,数字ORA-01722: invalid number
。
您说“上限阈值是整数值”,但table.upper_threshold
数据类型似乎是字符串数据类型(VARCHAR2或类似的数据),如table.lower_threshold
。 在这种情况下,执行以下过滤器时:
upper_threshold = 0
Oracle实现的是
to_number(upper_threshold) = 0
您不会收到ORA-01722错误,因为表中的所有值都会愉快地转换为数字。 您的朋友不是很幸运,并且他在upper_threshold
列中具有非数字值(空格,字母或其他内容)。
教导是,始终使用NUMBER列存储数字。
“实际上,我们都连接到相同的数据库,相同的表”
基本上,如果两个人针对具有相同数据的相同实际表运行相同的SQL,他们将获得相同的结果。 因此,你们中的一个必须做的与其他人有所不同。 尽管我无法想到可能导致ORA-01722错误的环境参数,但这可能与客户端设置有关。 更有可能是你们中的一个正在运行不同的语句或使用不同的表,或者(如Mathguy所建议的)对另一个数据集运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.