我是 plpgsql 的新手,我创建了一个存储过程来将表数据导入 refcursor,并且我正在尝试从 plpgsql 和 c# 调用该过程以检查过程/c# 代码是否工作正常。
程序:
CREATE OR REPLACE FUNCTION public.proc_get_test(out tbldata refcursor)
returns refcursor
LANGUAGE plpgsql
AS $function$
BEGIN
open tbldata for
select * from arc_mmstbrndgroup;
END;
$function$;
从 plpgsql 调用过程:
SELECT proc_get_test('cur');
然后尝试从 refcursor 获取数据:
FETCH ALL FROM cur;
SQL 错误 [34000]: 错误: 游标“cur”不存在
尝试的另一种方法:
BEGIN;
SELECT proc_get_test('cur');
FETCH ALL FROM cur;
COMMIT;
输出:
C#:
var p = new PostgreSQLDynamicParameters();
p.Add("tbldata", dbType: NpgsqlDbType.Refcursor, direction: ParameterDirection.Output);
using (var multi = _connection.QueryMultiple("proc_get_test", param: p, commandType: CommandType.StoredProcedure))
{
List<PostgresModel> dataMaster = multi.Read<PostgresModel>().AsList();
return new ResponseModel { ResultSet = dataMaster, StatusCode = 1, StatusDescription = "Success" };
}
Api 仅接收 1 行也具有空值
谁能帮我在 plpgsql 和 c# 中调用该过程?