基本上,我有一个观点,这是有下面的查询作为一个视图的一部分。
SELECT site_id ch_site_id
FROM bfg_router_pi_details
WHERE last_modified_date > (SELECT MAX (last_time_stamp)
FROM saa_bfg_feed_ctl)
现在在这个查询中,bfg_router_pi_details是另一个数据库中的视图,saa_bfg_feed_ctl是同一个数据库中的表。
现在,当这个查询像上面那样在where子句中使用内部查询时,它需要2个小时才能完成,因为它正在通过db链接。然而,如果我用实际的日期值替换内部查询,则需要2分钟。所以我想看看是否有什么方法可以在视图中定义一个变量,并将最后一个时间戳值赋给该变量,然后在查询的where子句中替换该变量,以便执行得更快。我希望你能理解手头的问题。
3条答案
按热度按时间ljo96ir51#
这可能是因为Oracle选择远程站点作为查询的驱动站点。尝试以下提示,告诉它从本地站点运行查询:
我不是100%确定这一点关闭我的头-如果你张贴一个计划,为您的查询可能能够帮助进一步。
ajsxfq5m2#
有很多方法可以做到这一点,但肯定所有这些都需要PLSQL编程。最简单的方法是创建一个包,在对视图进行查询之前,将MAX赋值给变量。这样看起来就像
可能你需要no_data_found,但这不是我的茶
你可以用同样的方式使用用户plsql上下文,所以请参考原始文档-http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm。
relj7zay3#
我知道这是一个旧的职位,但它是没有1在谷歌搜索结果,我从来没有使用过一个包,所以我制定了一个不同的方法使用CTE: