postgresql 存储过程、NPGSQL和返回记录

kadbb459  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(220)

PostgreSQL数据库的Npgsql dotnet客户端接口的7.0版本引入了一个突破性的变化,其中CommandType.StoredProcedure现在调用PostgreSQL PROCEDURE而不是FUNCTION。
我们的应用程序使用通用的代码,与几个数据库供应商。泛型代码使用DbCommand、DbConnection和DbProviderFactories等对象。我们的独立于供应商的应用程序中的每个数据库调用都是对存储过程的调用。大约有1/2的存储过程从SELECT语句返回结果作为记录集。
我知道Npgsql客户端可以被强制返回到遗留行为,它调用PostgreSQL FUNCTION而不是PROCEDURE。参见:存储函数和过程
但是,从未来的Angular 来看,是否有一种方法(计划是什么)让PostgreSQL PROCEDURE返回一个记录集-与其他数据库供应商一致?
在PROCEDURE中返回记录集的OUT参数是否有语法变化?
下面是一个不通过Npgsql返回任何数据的示例过程。

  1. CREATE OR REPLACE PROCEDURE public."AttributeSelect"()
  2. LANGUAGE 'sql'
  3. AS $$
  4. SELECT "Id" FROM "Attribute";
  5. $$;
nwsw7zdq

nwsw7zdq1#

,目前(Postgres 16)无法从PROCEDURE返回set。您可以使用OUTINOUT参数返回单行。请参阅:

  • 如何从存储过程(而不是函数)返回值?

要返回一个集合,请使用FUNCTION。一个所谓的“集合返回函数”,也就是表函数。相关信息:

  • 如何从PostgreSQL存储过程中获取结果集?

相关问题