SQL (Postgres) 函数定义 - 返回

标签 sql database function postgresql plpgsql

我正在尝试创建一个非常简单的 PostgreSQL 函数,但我不断收到一个非常奇怪的语法错误。我使用的语法与我在网上看到的任何语法都不一样(尽管这是教科书使用的语法),因此我无法弄清楚为什么它会失败...

这是SQL:

CREATE OR REPLACE FUNCTION gsum(graphID integer)
    RETURNS integer
    BEGIN
        DECLARE total integer DEFAULT 0
        SELECT sum(weight) INTO total
        FROM Edge
        WHERE gno = graphID
    RETURN total;
    END;

错误是:

ERROR:  syntax error at or near "BEGIN"
LINE 3:  BEGIN
         ^
********** Error **********

ERROR: syntax error at or near "BEGIN"
SQL state: 42601
Character: 68

最佳答案

你的基本错误:

  • DECLARE must come before BEGIN .
  • 语句需要以;结束。
  • plpgsql 函数的函数体是一个字符串,需要用引号引起来。使用美元引用以避免正文中引用的并发症。
  • 缺少关键字 AS
  • 缺少语言声明 LANGUAGE plpgsql
  • 类型不匹配。
  • 您不需要默认值。
  • 如果总和为 NULL,这仍会返回 NULL

CREATE OR REPLACE FUNCTION gsum(graphID integer)
  RETURNS integer AS
$func$
DECLARE
   total integer;
BEGIN
   SELECT sum(weight)::int INTO total
   FROM   edge
   WHERE  gno = graphID;

   RETURN COALESCE(total, 0);
END
$func$ LANGUAGE plpgsql;

你最好为此使用一个简单的 SQL 函数,例如 @Clodoaldo advised .只需添加 COALESCE()

关于SQL (Postgres) 函数定义 - 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782072/

相关文章:

python - 错误: 'NoneType' object is not iterable when read_sql

mysql - 为什么我不断收到此错误 : ERROR 1064 (42000)?

c# - 读取远程 MS Access 数据库 C#

sql - 如何在另一个存储过程中的一个存储过程中使用 SELECT 的结果?

database - "no such table"内存中 sqlite 错误

c中的函数可以返回long int吗?

mysql - 如何获取特定列的最后一条记录值?

sql - 在 Google BigQuery 中的最近日期左加入

excel - 在 Excel 中创建自定义查找函数时遇到问题。匹配和连接范围的问题

Javascript 函数内部的 this 关键字