PostgreSQL 函数上的函数定义意外结束

Posted

技术标签:

【中文标题】PostgreSQL 函数上的函数定义意外结束【英文标题】:unexpected end of function definition on PostgreSQL function 【发布时间】:2015-06-20 18:16:55 【问题描述】:

这个函数有什么问题? 已编辑>>

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $$

BEGIN
SELECT fn_name, count(*) + 1 FROM table_ebscb_spa_log02 WHERE time_type = 'Start' GROUP BY fn_name
RETURN NEW.fn_name;
END
$$
LANGUAGE plpgsql;

好的,我添加了“;”但是现在,当我尝试创建它时,它会向我发送消息 ERROR: syntax error at or near "RETURN" 第 5 行:返回 fn_name;

我该如何解决????

感谢高级。

【问题讨论】:

【参考方案1】:

您只需要添加分号:

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $$

BEGIN
SELECT fn_name, count(*) + 1 FROM table_ebscb_spa_log02 WHERE time_type = 'Start' GROUP BY fn_name;
RETURN NEW.fn_name;
END
$$
LANGUAGE plpgsql;

【讨论】:

嗨 user_0 你能帮我解决这个问题吗?也和postgreSQL有关,我有一个脚本***.com/questions/30942869/… 顺便说一句,请检查我编辑了问题,发生了其他事情。希望我不要滥用您的支持,非常感谢【参考方案2】:

SELECT 语句的末尾需要一个分号,END 后面还有一个分号:

CREATE OR REPLACE FUNCTION on_ai_myTable() RETURNS TRIGGER AS $$
  BEGIN
    SELECT fn_name, count(*) + 1 FROM table_ebscb_spa_log02 WHERE time_type = 'Start' GROUP BY fn_name;
    RETURN NEW.fn_name;
  END;
$$
LANGUAGE plpgsql;

见PL/pgSQl block layout 还有Executing a query with a single-row result

另外请注意,您需要更改 SELECT 语句 - 您现在编写它的方式,PL/pgSQL 编译器会抱怨它没有地方放置结果(您请求了两个值,fn_nam 和 count (*) + 1),但是您缺少一个 INTO 子句。

【讨论】:

感谢 korry,我想检查两个答案,但 user_0 先发布,再次感谢伙计。如果我没有滥用您的支持,我还有一个关于 postgreSQL 的问题希望您检查一下。

以上是关于PostgreSQL 函数上的函数定义意外结束的主要内容,如果未能解决你的问题,请参考以下文章

(节点 J.S.)SyntaxError:异步函数上的意外令牌函数

定义异步函数时的异步/等待节点 v9“意外令牌函数”

连续 ID 块上的 PostgresQL 窗口函数

Python作用域

使用 PostgreSQL 用户定义函数实现类似窗口函数的行为?

自定义 VBA 函数引发意外输出 [重复]