如何使用return next返回自定义记录



当我试图返回一个表时,我的结果显示为这样的

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

返回多行时,函数应声明为returns setof emprecord

但是整个例子可以通过使用CCD_ 2来简化;返回类型";。对此,您也不需要PL/pgSQL。一个(通常更有效的(language sql函数就足够了:

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

在线示例

最新更新