3 回答
TA贡献1864条经验 获得超6个赞
2.5 选项:
1a) 如果你只需要返回一个查询,你可以使用SETOF和RETURN QUERY
1b) 或者只使用语言SQL作为@ClodoaldoNeto,它使用 sql 的SELECTstmt本机返回查询
2)如果你需要在程序中处理结果,你必须使用SETOFand RETURN NEXT,确保你检查IF FOUND THEN RETURN;(注意缺少NEXT,如果给定将作为单个空白行返回)
理想情况下,我不想使用SETOF已知的程序返回完全没有或 1 行,但似乎SETOF需要从应用程序中获取一个程序来查询,例如 sql 语句并让驱动程序识别NO ROWS RETURNED
下面的例子:
create table emptytable(id int);
create function selectany() returns setof emptytable as $$
DECLARE
_out emptytable;
BEGIN
SELECT * INTO _out FROM emptytable limit 1;
IF FOUND THEN
RETURN _out;
END IF;
RETURN;
END;
$$ LANGUAGE PLPGSQL;
create function selectany_rq() returns setof emptytable as $$
BEGIN
RETURN QUERY SELECT * INTO _out FROM emptytable limit 1;
END;
$$ LANGUAGE PLPGSQL;
TA贡献1796条经验 获得超10个赞
正如评论中所建议的那样返回 setof emptytable
create function selectany()
returns setof emptytable as $$
select *
from emptytable
limit 1
;
$$ language sql;
普通的 sql 可以做到这一点
- 3 回答
- 0 关注
- 189 浏览
添加回答
举报