PostgreSQL 11 - 存储过程支持

3
  • PostgreSql 版本:11 Beta 4
  • Npgsql 版本:v4.0.3

我想要测试 PostgreSql 的存储过程,但是出现了错误。

"42809: get_customer_list() is a procedure"

我的命令类型

CommandType.StoredProcedure

Npgsql是否支持PostgreSQL 11存储过程?
1个回答

6
请查看Npgsql FAQ中的此答案。简而言之,您可以调用存储过程,但不能使用CommandType.StoredProcedure。只需使用文本CALL my_stored_procedure()创建常规命令即可。

谢谢你的回答。我开发了一个数据层,支持4个数据库(MsSql、Postgresql、MySql、Oracle)使用单一代码。我不得不使用“CommandType.StoredProcedure”来编写单一代码。到目前为止,我一直在使用“Functions”,但没有使用“Functions”的“Out”参数。我想使用PostgreSql 11附带的“Stored Procedure”函数。 - Korkut Düzay
我写的另一个问题是存储过程结果集没有返回数据,只有消息出现了 “CALL 查询在 136 毫秒内成功返回。我的存储过程: CREATE PROCEDURE Get_Customer_List() AS $$ SELECT * FROM public."Customer"; $$ LANGUAGE SQL; - Korkut Düzay
1
据我所知,过程无法返回任何内容(至少目前是这样)。函数支持所谓的输出变量,并且可以无问题地使用,因此您可能不需要存储过程。 - Shay Rojansky
是的,但不能与setof或table一起使用。我认为可以通过存储过程来完成。例如: " CREATE OR REPLACE FUNCTION public.test_func ( OUT total_count integer ) RETURNS SETOF "Manufacturer" AS $$total_count := 100;SELECT * FROM public."Manufacturer";$$ LANGUAGE sql; " "错误:由于OUT参数,函数结果类型必须为整数 SQL状态:42P13" - Korkut Düzay
所以,函数支持返回内容,以及输出变量(这只是指定函数返回内容的另一种方式)。据我所知,新的过程都不支持这两种方式,即使它们支持,Npgsql也不支持处理它们(至少目前是这样)。 - Shay Rojansky
@KorkutDüzay - 你可以在函数中返回setof -- 只是不能像你列出的那样与OUT参数结合使用。 - Hambone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接