GBQ让我们执行下面的语句,它非常好地提高了我的查询效率:
DECLARE practices ARRAY<INT64>;
SET practices = (SELECT ARRAY(select distinct id from business));
select *
from business
where business.id in UNNEST(practices)
我如何在Oracle DB w/ Oracle SQL上完成这种相同类型的预取?我想使用一组类似的SQL语句来重构现有的Oracle SQL查询,而不是低效的CTE。
P.S.我已经看过其他解决方案,如How to declare variable and use it in the same Oracle SQL script?,但是,这些解决方案似乎不适合我在Oracle SQL中工作,并且/或者它们被列在单独的执行行上。
即不工作:
DECLARE practices = 'My Practice Name';
select *
from business
where business.name = '&practices'
1条答案
按热度按时间y4ekin9u1#
举个简单的例子,不要取两次;只需在一个查询中完成所有操作:
DISTINCT
。*SELECT * FROM business WHERE id IS NOT NULL
*如果你确实想将值放入数组中(大多数时候你可能不想这样做,你可能想过早地优化),那么你可以使用参数化的PL/SQL匿名块,并将值收集到一个集合中,以便在后续语句中使用:
并使用bind变量将游标绑定到out参数,您可以从任何用于访问数据库的语言(PHP、Java、C#等)访问该参数。
但是,大多数情况下,您将使用子查询或子查询分解子句,并在单个查询中完成所有操作(然后您不需要在SQL和PL/SQL之间进行上下文切换,或者更糟的是,从客户端应用程序执行多个语句并为每个语句产生网络请求的开销)。
fiddle