我正在尝试创建一个非常简单的 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 beforeBEGIN
. - 语句需要以
;
结束。 - 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/