我发现了这种奇怪的行为,并且为此感到震惊……有人有什么想法吗?
Oracle 10g:
我有两个不同的表,都具有名为 TESTCOL 的列,作为 Varchar2(10),不能为空。
如果我对 table1 执行此查询,则会得到正确的结果:
select * from table1 where TESTCOL = 1234;
请注意,我不是专门放置“1234” ...不是错字,而是动态生成的查询,因此我将尽量不进行更改(至少在不久的将来不会更改)。
但是,如果我在 table2 上运行相同的查询,则会收到以下错误消息:
ORA-01722: Invalid number
这两个查询都在相同的 session ,相同的数据库上运行。
我一直在通过该列连接这两个表,并且该连接可以正常工作,每当我尝试使用该条件时,就会显示唯一的问题。
关于一张 table 与另一张 table 可能有什么不同的任何想法?
提前致谢。
最佳答案
如果TESTCOL
包含非数字,那么在将TESTCOL
条目转换为数字时,Oracle可能会遇到问题。因为,它在内部执行的操作是:
select * from table1 where TO_NUMBER(TESTCOL) = 1234;
如果您确定
1234
不能表示为VARCHAR
文字,请尝试使用此方法,以便比较varchar值,而不是数字值:select * from table1 where TESTCOL = TO_CHAR(1234);