0

我正在寻找的是我所说的“参数化视图”。在互联网上四处查看时,我了解到 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. 创建一个新类型来保存我想要返回的所有数据,但这会引入冗余,这是我在数据库设计中非常希望避免的。

我现在的问题是,这些是唯一的选择,还是更有可能。请注意,我刚刚启动了 PostgreSQL 和 C#.NET。

4

1 回答 1

1

根据文档,CREATE FUNCTION您可以使用OUT参数或RETURNS TABLE为此。RETURNS TABLE往往更具可读性。

这篇 Postgres Online 文章可能会很有趣,尽管我还没有详细阅读它来检查它并确保它是最新的和正确的。

于 2013-03-08T14:08:55.467 回答