存储函数postgresql返回表
存储过程/函数的新手。我搜索了谷歌,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,在公共架构中。
希望的结果是一旦函数被调用就返回表。
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()
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$;
Pozs你的第二个盒子像一个魅力工作,谢谢。我正在学习更多关于存储过程的知识,我不确定如何实现“返回集记录” – Bolaji
'回报table'需要如图您发布的手动链接列列表中。 –
不相关的,但是:如果你打算返回'table_id'最高的行,那么在Postgres中有更有效的方法。 –
另外:“*在MySql中,这是基本的*”不,它不是因为你不能从那里返回一个结果集。 –