【问题标题】:How to have sysdate result remoted across database link?如何通过数据库链接远程远程 sysdate 结果?
【发布时间】:2014-10-08 07:40:06
【问题描述】:

我正在跨数据库链接运行从 Oracle 到 Sybase 服务器的查询。

其中的 where 子句是对日期的限制,我希望它与 sysdate 相关联,所以是这样的:

select * from some_remote_view where some_numeric_key = 1 and some_date > sysdate+2

问题是,当我解释计划时,只有条件 some_numeric_key = 1 出现在远程连接到 sybase 服务器的实际 sql 中。 Oracle 期望自己执行日期过滤。

这导致了性能噩梦 - 我需要远程处理该日期过滤器以使此查询快速工作

即使我尝试将 sysdate 转换为这样的字符字符串: to_char(sysdate-2,'YYYY-MM-DD')

它仍然没有远程它。

我可以做些什么来让 Oracle 通过 db 链接远程将此日期过滤器连接到 Sybase?

【问题讨论】:

  • 数据库链接的乐趣。对 SYbase 不太了解,但是当遇到类似的 Oracle-Oracle 问题时,我会查看是否可以从远程数据库的视图中驱动结果,这通常可以远程进行过滤。如果查询/视图需要参数,则可以从远程数据库上针对此特定查询的合适表驱动此参数,首先在运行查询之前插入参数数据。

标签: oracle sybase dblink


【解决方案1】:

在 Oracle 和其他平台之间进行集成时,我经常遇到这个问题,不仅仅是SYSDATE,还有其他非标准函数。

有两种方法可以解决这个问题,根据我的经验,第一种是最可靠的。

首先,您可以使用您需要的过滤器在远程数据库上创建一个视图,然后在 Oracle 端,您只需从新视图中进行选择,无需其他过滤器。

其次,如果不允许在远程端创建对象,请尝试在 Oracle SELECT 语句中使用绑定变量(数据类型正确!),例如:

declare
   v_some_date constant date := sysdate + 2;
begin
    insert into oracle_table (...)
    select ...
      from remote_table@db_link t
     where t.some_numeric_key = 1
       and t.some_date > v_some_date;

    commit;
end;
/

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多