我正在寻找的是我所说的“参数化视图”。在互联网上四处查看时,我了解到 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
子句就不再正确了。我可以通过两种方式解决这个问题:
- 使用
RETURNS SETOF RECORD
,但这似乎在我的 C#.NET 应用程序中存在一些问题,因为它没有给我任何列定义。 - 创建一个新类型来保存我想要返回的所有数据,但这会引入冗余,这是我在数据库设计中非常希望避免的。
我现在的问题是,这些是唯一的选择,还是更有可能。请注意,我刚刚启动了 PostgreSQL 和 C#.NET。