C# 来自C的Postgres存储过程#
我有一个Postgres数据库,其中包含一个返回JSON文档的存储过程,基于本文: 该过程如下所示:C# 来自C的Postgres存储过程#,c#,.net,postgresql,stored-procedures,C#,.net,Postgresql,Stored Procedures,我有一个Postgres数据库,其中包含一个返回JSON文档的存储过程,基于本文: 该过程如下所示: -- Procedure that returns a single result set (cursor) CREATE OR REPLACE FUNCTION get_data_test() RETURNS refcursor AS $$ DECLARE ref refcursor; -- Declare a cursor variable BEGIN OP
-- Procedure that returns a single result set (cursor)
CREATE OR REPLACE FUNCTION get_data_test() RETURNS refcursor AS $$
DECLARE
ref refcursor; -- Declare a cursor variable
BEGIN
OPEN ref FOR -- Open a cursor
SELECT row_to_json(r) AS data
FROM
(
SELECT *
FROM data AS d
) r;
RETURN ref; -- Return the cursor to the caller
END;
$$ LANGUAGE plpgsql;
然后,我从.net控制台应用程序运行以下代码:
// Making connection with Npgsql provider
using (NpgsqlConnection conn = new NpgsqlConnection(connstring))
{
conn.Open();
var trans = conn.BeginTransaction();
var cmd = new NpgsqlCommand("get_data_test", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Transaction = trans;
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
Trace.WriteLine(reader[0]);
}
}
输出是具有refcursor名称的单个实例,而不是实际数据:
我不认为我遗漏了一个步骤,这个refcursor应该不绑定地返回。我做错了什么?碰巧,教程错了: 尼斯GitHub错误报告: 正确答案:
-- Procedure that returns a single result set (cursor)
CREATE OR REPLACE FUNCTION get_data_test() RETURNS TABLE (data JSON) AS $$
BEGIN
RETURN query
SELECT row_to_json(r) AS data
FROM
(
SELECT *
FROM data AS d
) r;
END;
$$ LANGUAGE plpgsql;
可能重复的