我們目前有一個存儲過程,需要做到以下幾點: 如果查詢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可以讓甲骨文停止計數一旦得到一個命中(意味着有一個或多個行從查詢中返回)。當然可以根據數據和查詢做出很大的改變。