SQL函数返回类型:TABLE vs SETOF记录

前端之家收集整理的这篇文章主要介绍了SQL函数返回类型:TABLE vs SETOF记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
返回TABLE和SETOF记录的函数有什么区别,其他所有的相等.
CREATE FUNCTION events_by_type_1(text) RETURNS TABLE(id bigint,name text) AS $$
    SELECT id,name FROM events WHERE type = $1;
$$LANGUAGE sql STABLE;

CREATE FUNCTION events_by_type_2(text) RETURNS SETOF record AS $$
    SELECT id,name FROM events WHERE type = $1;
$$LANGUAGE sql STABLE;

这些功能似乎返回相同的结果.见这SQLFiddle.

解决方法

当返回SET OF记录时,输出列不输入并未命名.因此,此表单不能直接在FROM子句中使用,就好像它是一个子查询或表.

也就是说,当发行时:

SELECT * from events_by_type_2('social');

我们得到这个错误

ERROR: a column definition list is required for functions returning
“record”

它可以通过sql调用者“转换”到正确的列类型.此表单可以正常工作:

SELECT * from events_by_type_2('social') as (id bigint,name text);

并得出:

 id |      name      
----+----------------
  1 | Dance Party
  2 | Happy Hour
 ...

为此,SET OF记录被认为不太实际.仅当提前不知道结果的列类型时才使用它.

原文链接:https://www.f2er.com/mssql/82320.html

猜你在找的MsSQL相关文章