我正在尝试做类似以下的事情:
procedure some_name ( p_ref_cursor in out nocopy sys_refcursor )
is
begin
open p_ref_cursor for
select item1, item2 from (some complicated join query);
fetch p_ref_cursor into xx;
if p_ref_cursor%NOTFOUND
then
select item1, item2 from table2 where item3='y';
end if;
end
如果第一个select语句没有返回任何内容,它应该执行第二个select语句来检索值。我遇到的问题是当提取光标时,结果集被清除。因此,无论第一个select语句是否找到任何内容,它都会像找不到它一样。
我尝试了以下内容:
procedure some_name ( p_ref_cursor in out nocopy sys_refcursor )
is
local_var1 number
local_var2 number
begin
open p_ref_cursor for
select item1, item2
into local_var1, local_var2
from (some complicated join query);
if local_var1 is null
then
select item1, item2 from table2 where item3='y';
end if;
end
然而,看起来INTO语句不能与ref cursor一起使用。
谢谢, 丹
答案 0 :(得分:1)
对于我认为应该有用的东西来说,这似乎有些过分。但我相信它可以解决问题,并消除你的if语句的需要。此外,它可能会稍微慢,因为它必须进行两个查询。因此,如果性能是最重要的,那么我就不会使用它。
WITH CTE AS
(SELECT item1, item2, '1' as Src
FROM (some complicated join query)
UNION
SELECT item1, item2, '2' as SRC
FROM table2 where item3='y')
SELECT item1, item2
FROM CTE
WHERE src = (Select min(src) from cte)