问题描述
我在包中有一个返回 SYS_REFCURSOR 的过程,我想根据条件返回 null 或空,不知道该怎么做。
PROCEDURE test( id_number IN VARCHAR2,resultIN OUT SYS_REFCURSOR) AS
BEGIN
if true then
OPEN resultIN FOR
SELECT
fieldsValue
from TableName;
ELSE
Return empty resultIN ;
END IF;
END;
这对我不起作用。我该怎么做。
解决方法
您可以按如下方式使用假查询:
OPEN resultIN FOR
select * from dual where 1=2;
-- if you want one row also then use
OPEN resultIN FOR
select case when 1=2 then 1 end as dummy_row from dual;
使用 OPEN resultIN FOR
很重要,否则将使用它的应用程序将直接抛出关闭的游标错误。 (光标未打开。)
您可以像这样简单地将 NULL 分配给 refcursor:
PROCEDURE test( id_number IN VARCHAR2,resultIN OUT SYS_REFCURSOR) AS
BEGIN
if false then
OPEN resultIN FOR
SELECT dummy
from dual;
ELSE
resultIN := null;
END IF;
END;