我有一个函数可以返回所有员工ID 函数定义是这样的:
CREATE OR REPLACE FUNCTION tmp()
RETURNS setof record AS
$func$
begin
select emp_id from employee_master;
end;
$func$
LANGUAGE plpgsql;
但是当我使用
调用此函数时select * from tmp() as abc(emp_id text);
它给出了错误,如
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function "tmp" line 3 at SQL statement
请给出解决方案:)
答案 0 :(得分:2)
如果要从PL / PgSQL函数返回行集,必须使用RETURN
- 在这种情况下,可能RETURN QUERY
:
RETURN QUERY SELECT emp_id FROM employee_master;
我完全没有看到在PL / PgSQL函数中使用它的意义。
答案 1 :(得分:0)
将函数设为plain SQL,如下所示:
...
LANGUAGE SQL;
答案 2 :(得分:0)
声明列的实际类型而不是笨重的record
类型更实用 更实用。假设emp_id
为integer
,一个简单的SQL函数可能如下所示:
CREATE OR REPLACE FUNCTION tmp()
RETURNS SETOF integer AS
$func$
SELECT emp_id FROM employee_master
$func$ LANGUAGE sql;
但是,评论中的错误消息与给定的问题不符。根据您的实际要求,您可以调整RETURN
类型。