当我试图返回一个表时,我的结果显示为这样的
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;
在线示例