我有一个连接两个表的查询。一个表的列为varchar类型,另一个表的类型为number。我已经在3个oracle数据库上执行了我的查询,并且看到了一些我希望可以解释的奇怪结果。在两个数据库中,类似于以下工作。
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
在此查询中,tableA.col1的类型为number,tableB.col2的类型为varchar。这在两个数据库中工作正常,但在第三个数据库中没有。在第三个我得到(ORA-01722)错误。在第三个我需要做的事情......
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
这适用于所有数据库。我的问题是为什么?以上是一个简化的查询,真正的查询稍微复杂一点,并检索大量数据,因此第一个版本要快得多。如果我能在所有环境中工作,那就太好了。
有谁知道为什么这可能在某些oracle数据库中工作而不是其他没有数据类型强制转换的数据库?是否存在能够实现此类行为的全局设置?