【问题标题】:How to return a custom record using return next如何使用 return next 返回自定义记录
【发布时间】:2020-11-01 05:18:01
【问题描述】:

当我尝试返回表格时,我的结果显示如下

generateClassRecord
--------------------
(james, 5)
(bob, 10)

而不是这样

+-------+----------+
| name  | new_rank |
+-------+----------+
| james |        5 |
| bob   |       10 |
| cole  |       54 |
+-------+----------+

我假设我没有正确返回行。有人可以建议我如何返回我的数据。我尝试使用返回查询,但是当我调用我的函数时,它告诉我类型不匹配。

CREATE TABLE employees (
    id integer primary key
    name text,
    rank integer
);

create type empRecord as (
    name text,
    new_rank integer
);

INSERT INTO employees (id, name, rank) VALUES (1, 'james', 5), (2, 'bob', 10), (3, 'Cole', '54');

CREATE OR REPLACE FUNCTION
   generateEmpRecord()
   RETURNS empRecord
as $$

DECLARE
    r empRecord;
BEGIN
    FOR r IN
        SELECT name, rank
        FROM employees;   
    LOOP
        return next r;
    END LOOP;
    
END;

$$ language plpgsql

【问题讨论】:

    标签: sql postgresql plpgsql


    【解决方案1】:

    您的函数应声明为returns setof emprecord,因为您要返回多行。

    但是整个例子可以通过使用returns table 来简化——那么你就不需要额外的“返回类型”了。您也不需要为此使用 PL/pgSQL。一个(通常更高效)language sql 函数就足够了:

    CREATE OR REPLACE FUNCTION generateemprecord()
       RETURNS table(name text, new_rank int)
    as $$
      SELECT name, rank
      FROM employees;   
    $$ 
    language sql;
    

    Online example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多