如何处理 refcursor 不检索 PGSQL 中的数据

how to handle refcursor not retrieving data in PGSQL

如何处理 PGSQL 中的 refcursor 不检索数据(空结果集)?

create or replace function function_1( In tblname varchar(15))
 returns refcursor
 language plpgsql
 as $$
    declare
    v_cnt integer;
    r_ref refcursor='ref2';
    v_sql text='select * from tbl where 1=2';--default statement;shld return empty if 
                                              --input is invalid
begin

    if tblname ilike 'scientist' then
         v_sql:='select * from tbl'; --table name 1
   end if;
   
open r_ref for
     execute v_sql;
 return r_ref;  


end;
$$;

有没有不使用动态sql的其他处理方式? 执行:测试用例 1:应该 return 清空结果集

select * from function_1('invalid');  
fetch all in "ref2";

执行:测试用例 2:应该 return 来自 able

的正确数据
select * from function_1('scientist');  
fetch all in "ref2";

谢谢

当您只有一个测试用例要覆盖时,您不需要动态查询 = 'scientist'。在这种情况下,你可以简单地做:

create or replace function function_1( In tblname varchar(15))
 returns setof scientist language plpgsql as $$
begin
    if tblname ilike 'scientist' then
         return query
           select * from scientist ;
   end if;
end;
$$;