2017-04-13 80 views
0

存储过程/函数的新手。我搜索了谷歌,Stackoverflow和Youtube,并且发现了各种各样令人费解的例子,有些不是英文的。存储函数postgresql返回表

我想了解一个存储函数的基本语法来返回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,在公共架构中。

希望的结果是一旦函数被调用就返回表。

+1

'回报table'需要如图您发布的手动链接列列表中。 –

+0

不相关的,但是:如果你打算返回'table_id'最高的行,那么在Postgres中有更有效的方法。 –

+1

另外:“*在MySql中,这是基本的*”不,它不是因为你不能从那里返回一个结果集。 –

回答

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() 
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$; 
+0

Pozs你的第二个盒子像一个魅力工作,谢谢。我正在学习更多关于存储过程的知识,我不确定如何实现“返回集记录” – Bolaji