加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:28:38 所属栏目:MsSql教程 来源:网络整理
导读:返回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) RET
返回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记录被认为不太实际.仅当提前不知道结果的列类型时才使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读