函数中的参数化视图或泛型返回值

时间:2013-03-08 13:17:41

标签: c# postgresql stored-procedures views

我正在寻找的是我所谓的“参数化视图”。在网上浏览时,我了解到PostgreSQL不支持,而且我应该使用函数。

所以我创建了一个函数:

CREATE OR REPLACE FUNCTION public.student_get_byschool(
    _schoolid integer
) RETURNS SETOF student AS
$body$
    SELECT * FROM student WHERE schoolid=_schoolid;
$body$
LANGUAGE 'sql';

但是,如果我想通过加入其他记录来选择该学生的一点,我的RETURNS条款就不再正确了。我可以通过两种方式解决这个问题:

  1. 使用RETURNS SETOF RECORD,但这似乎在我的C#.NET应用程序中存在一些问题,因为它没有给我任何列定义。
  2. 创建一个新类型,其中包含我想要返回的所有数据,但这会引入冗余,这是我在数据库设计中非常希望避免的。
  3. 我现在的问题是,这些是唯一的选择,还是更有可能。请注意,我刚刚启动了PostgreSQL和C#.NET。

1 个答案:

答案 0 :(得分:1)

根据documentation for CREATE FUNCTION,您可以使用OUT参数或RETURNS TABLERETURNS TABLE往往更具可读性。

This Postgres Online article可能会被证明是有趣的,虽然我没有仔细阅读它以检查它并确保它是最新的和正确的。