我们目前有一个存储过程,需要做到以下几点: 如果查询1返回任何结果打开SYS_REFCURSOR游标为,然后返回 其他 打开的游标QUERY2的Oracle存储过程返回数据集的基础上计数
目前我们正在对Query1的from和where子句计数(*),并在if-else语句中使用count。但是,这会导致query1被执行两次。有没有一种方法来优化这个?
我们目前有一个存储过程,需要做到以下几点: 如果查询1返回任何结果打开SYS_REFCURSOR游标为,然后返回 其他 打开的游标QUERY2的Oracle存储过程返回数据集的基础上计数
目前我们正在对Query1的from和where子句计数(*),并在if-else语句中使用count。但是,这会导致query1被执行两次。有没有一种方法来优化这个?
打开光标查询1 &执行真正的查询。将它包装在BEGIN .. END块中&捕获无数据发现异常。
BEGIN
-- query1 code
-- return data
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
BEGIN
-- query2 code
-- return data
END;
query2代码将在query1没有返回数据时运行。
我喜欢菲尔的回答为好,但另一种选择是使用你使用相同的逻辑,但是转换计数查询使用ROWNUM STOPKEY,如:
select count(1)
into v_cnt
from some_table
where some_field like 'ABC%'
and rownum <= 1;
的ROWNUM可以让甲骨文停止计数一旦得到一个命中(意味着有一个或多个行从查询中返回)。当然可以根据数据和查询做出很大的改变。