关于存储过程/函数的新手。我搜索了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,在我公司的服务器上。
期望的结果是在调用函数后返回表。
答案 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$;