存储函数postgresql返回表

时间:2017-04-13 15:25:25

标签: sql postgresql function stored-procedures postgresql-9.1

关于存储过程/函数的新手。我搜索了Google,Stackoverflow和Youtube,并且发现了各种令人费解的例子,有些不是英文的。

我正在尝试理解存储函数的基本语法,以返回Postgresql中的表。在MySql中这是基本的但我似乎无法绕过Postgresql的语法我有SQL语句我需要返回我想要的行(表),如下所示。我尝试了以下代码,但它不起作用。非常感谢帮助,提前谢谢。

CREATE OR REPLACE FUNCTION Getcurrent()
RETURNS table AS $schedule$

$BODY$ BEGIN

SELECT *
FROM archived_table
WHERE table_id>=ALL(SELECT table_id FROM archived_table);

RETURN schedule;
END;$BODY$
   LANGUAGE plpgsql;

**********错误**********

ERROR:  syntax error at or near "AS"
LINE 2: RETURNS table AS $schedule$
                      ^

这是错误消息。

我引用了以下链接并且没有运气。https://www.postgresql.org/docs/9.1/static/sql-createfunction.html 我在公司架构中使用pgAdminIII,在我公司的服务器上。

期望的结果是在调用函数后返回表。

2 个答案:

答案 0 :(得分:0)

create or replace function test_fn()
returns table("Num1" int, "Num2" int)

AS $$
BEGIN

return query
select  1, 2;

END; $$

LANGUAGE 'plpgsql';

要打电话:

select * from test_fn()

答案 1 :(得分:0)

RETURNS TABLE未完成,因此出现错误消息。

如果您打算返回表格的所有列,则可以使用RETURNS SETOF <table_name>表单。

否则,您需要按名称和类型提及每个输出列,并使用RETURNS TABLE

RETURNS TABLE (
   col_alias_1 INT,
   col_alias_2 TEXT,
   col_alias_3 <some_other_type>,
   ...
)

或者使用OUT parameters + RETURNS SETOF RECORD表示您(可能)一次返回多行。

此外,如果您的操作与一些SQL语句一样简单,请改为使用LANGUAGE SQL

CREATE OR REPLACE FUNCTION Getcurrent()
  RETURNS SETOF archived_table
  LANGUAGE SQL
AS $BODY$
  SELECT *
  FROM archived_table
  WHERE table_id>=ALL(SELECT table_id FROM archived_table);
$BODY$;