存储过程/函数方面的新手。我搜索了 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 我在我公司的服务器上以公共(public)模式使用 pgAdminIII。
期望的结果是在调用函数后返回表。
最佳答案
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$;
关于sql - 存储函数 postgresql 返回表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43396213/