gpt4 book ai didi

SQL 函数返回类型 : TABLE vs SETOF records

转载 作者:行者123 更新时间:2023-11-29 11:08:45 24 4
gpt4 key购买 nike

返回 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 .

最佳答案

当返回 SETOF 记录 时,输出列没有类型也没有命名。因此,这种形式不能像子查询或表一样直接在 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 ...

出于这个原因,SETOF 记录 被认为不太实用。仅当结果的列类型事先未知时才应使用。

关于SQL 函数返回类型 : TABLE vs SETOF records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com