sql - 存储函数 postgresql 返回表

标签 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 我在我公司的服务器上以公共(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/

相关文章:

sql - 查找连接表中缺失的值,纠正 SQL Server 2008

sql 计算以以下开头的行的频率

postgresql - 一秒钟内根据多行更新一个表中的多行

sql - 独立对列进行排序,使得所有空值都位于每列的最后

function - 如何在运行时将函数导入到 QTP 测试中?

arrays - 在设备上运行时调用错误中的额外参数

sql - 存储过程中是否需要 "SET NOCOUNT OFF"?

mysql 外键错误 150

postgresql - 如何对接MongoDB和Superset BI并导入实时数据?

Java 函数指针和自动装箱