调用函数时出错

时间:2014-01-23 11:31:22

标签: sql postgresql plpgsql sql-function

我有一个函数可以返回所有员工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

请给出解决方案:)

3 个答案:

答案 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_idinteger,一个简单的SQL函数可能如下所示:

CREATE OR REPLACE FUNCTION tmp()
  RETURNS SETOF integer AS
$func$
   SELECT emp_id FROM employee_master
$func$  LANGUAGE sql;

但是,评论中的错误消息与给定的问题不符。根据您的实际要求,您可以调整RETURN类型。