我发现了这种奇怪的行为,并且为此感到震惊……有人有什么想法吗?

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);

10-06 00:38