选择一个字符串作为数字 Oracle
我发现这个奇怪的行为并突破了它...有没有人有任何想法?
Oracle 10g:
我有两个不同的表格 , 都有这个列命名 "
TESTCOL
" 作为
Varchar2/10/
, 没有重置。
如果我履行这个请求
桌子
1 , 我会得到正确的结果:
笔记
注意我没有特别放置 '1234'... 这不是拼写错误,它是一个动态生成的查询,我会尽量不要改变它。 /至少在不久的将来/.
但如果我履行相同的请求
桌子
2, 我将收到以下错误消息:
两个请求都在一个会话中执行,在一个数据库中。
我根据这一列连接这两个表,连接工作正常,只要我尝试使用此条件,唯一的问题就会表现出来。
关于什么可以与一张桌子不同的想法?
提前致谢。
Oracle 10g:
我有两个不同的表格 , 都有这个列命名 "
TESTCOL
" 作为
Varchar2/10/
, 没有重置。
如果我履行这个请求
桌子
1 , 我会得到正确的结果:
select * from table1 where TESTCOL = 1234;
笔记
注意我没有特别放置 '1234'... 这不是拼写错误,它是一个动态生成的查询,我会尽量不要改变它。 /至少在不久的将来/.
但如果我履行相同的请求
桌子
2, 我将收到以下错误消息:
ORA-01722: Invalid number
两个请求都在一个会话中执行,在一个数据库中。
我根据这一列连接这两个表,连接工作正常,只要我尝试使用此条件,唯一的问题就会表现出来。
关于什么可以与一张桌子不同的想法?
提前致谢。
没有找到相关结果
已邀请:
4 个回复
奔跑吧少年
赞同来自:
那时不包含数字 Oracle 转换记录时可能会遇到问题
数量。 因为他在内部做了什么,是:
如果你真实的话
不能表达为文字
, 然后尝试相反比较 varchar, 而不是数字:
龙天
赞同来自:
不是数字
. 使用数字文字的字符串的比较导致隐式转换。 因此,任何价值 TESTCOL, 哪个不能给予数字会抛出 ORA-1722.
它在比较两个表时不会影响你,因为你比较字符串。
所以,你有几个选项,其中没有一个你不喜欢。 最明显的答案清除表到表格 2 hdoes 没有包含非数字数字。 理想情况下,您必须将其与数字数据类型的列更改相结合。 否则,您可以更改生成器,以便它产生您可以针对数据模型运行的代码 shonky. 在这种情况下,如果相关的列具有字符类型的数据,则这意味着在引号中包装文字。
八刀丁二
赞同来自:
用表达方式
你宣布你想考虑
作为数字栏,所以 Oracle 尝试在此列中转换所有值。
ORA-01722 它出现,因为显然,在该列中至少有一个值
不是
是一个数字。
即使你声称它 "
不是错字
", 这是真实的。 这是一个语法错误。
您需要将参数声明为使用单引号的字符串文字:
创建正确的州 - 这是您问题的唯一解决方案。
风见雨下
赞同来自: