以下查询在使用 TOAD(使用本机 Oracle 驱动程序)直接针对 Oracle 11 运行时有效
select ... from ... where ...
and srvg_ocd in (
select ocd
from rptofc
where eff_endt = to_date('12/31/9999','mm/dd/yyyy')
and rgn_nm = 'Boston'
) ...
;
如果从 SQL Server 2008 通过openquery()
. SQL Server 有一个使用 Oracle Provider OLE DB 驱动程序到 Oracle 数据库的链接。
select * from openquery( servername, '
select ... from ... where ...
and srvg_ocd in (
select ocd
from rptofc
where eff_endt = to_date(''12/31/9999'',''mm/dd/yyyy'')
and rgn_nm = ''Boston''
) ...
');
查询没有在合理的时间内返回,并且用户终止了查询。我不知道它最终是否会以正确的结果返回。
直接 TOAD 查询有效工作并且openquery()
“从不”返回的版本是可重现的。
对 的小修改openquery()
给出正确的有效结果:更改eff_endt
为trunc(eff_endt)
.
这很好,但似乎没有必要进行更改。
openquery()
openquery()
应该是通过的,那么TOAD和行为之间怎么会有区别呢?
我们关心的原因是因为我们经常使用 TOAD 直接访问 Oracle 来开发复杂的查询。一旦我们的查询功能和优化,我们将其转换为一个openquery()
字符串,以便在 SQL Server 应用程序中使用。openquery()
当我们知道它作为直接查询工作时,查询突然失败是非常严重的。然后我们必须通过反复试验寻找解决方法。
我想查看这两个场景的 Oracle 跟踪文件,但是 Oracle 服务器在另一个组织内,我们没有得到 Oracle DBA 的合作。
有谁知道任何驱动程序,或蟾蜍,或???可能导致差异的问题?有没有办法消除这个问题,使两种方法总是给出相同的结果?