我创建了一个返回SYS_REFCURSOR的oracle函数。问题是我需要返回的数据可能由两个不同的查询产生。基本上,如果第一个查询返回没有数据,那么我需要运行一个不同的查询,然后返回refcursor。SYS_REFCURSOR的PL/SQL检查大小
这里是我的大创意
FUNCTION F_RETURN_RECORD(
P_VAL in NUMBER)
RETURN SYS_REFCURSOR AS TYPE R_CURSOR IS REF CURSOR;
my_record_1 R_CURSOR;
processed_record R_CURSOR;
BEGIN
OPEN my_record_1 FOR select e.COL1, e.COL2,a.COL1,e.COL3, e.COL4,
e.COL5, e.COL6, e.COL7, e.COL8, e.COL9,
e.COL10, e.COL11
from table1 e
inner join table2 a on e.COL2=a.COL2
where e.COL1=P_VAL;
if my_record_1%notfound
then
close my_record_1;
OPEN processed_record for select e.COL1, e.COL2,a.COL1,e.COL3, e.COL4,
e.COL5, e.COL6, e.COL7, e.COL8, e.COL9,
e.COL10, e.COL11, e.COL12, e.COL13, e.COL14
from table3 e
inner join table2 a on e.COL2=a.COL2
inner join table 4 b on a.col1=b.col2
where e.COL1=P_VAL;
return processed_record;
end if;
DBMS_OUTPUT.PUT_LINE('Returning data.................');
return my_record_1;
END F_RETURN_RECORD;
无论出于何种原因if my_record_1%notfound
检查不起作用。我想我的问题是我如何检查是否my_record_1游标不包含任何数据?
谢谢
'%notfound%'只有在从游标中获取时才有意义。我不认为你可以做你想做的事。你也许可以在你现在两个人之间用'union all'查询一个单独的查询,并附加'exists'检查? –
您的示例查询写入的方式看起来像某种分支决策逻辑...使用查询1 ...如果没有结果,请尝试另一个查询...是否正确? –