如何在 OUT SYS_REFCURSOR 中返回 null

问题描述

我在包中有一个返回 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;