PostgreSQL函数定义意外结束

6
这个函数有什么问题? 编辑>>
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" LINE 5: RETURN fn_name;”

我该如何解决这个问题?

非常感谢。

2个回答

7

你只需要添加分号:

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有关。我有一个脚本 http://stackoverflow.com/questions/30942869/insert-a-number-in-a-column-based-on-other-columns-old-inserts - Natysiu16
顺便提一下,请检查我编辑了问题,发生了其他事情。希望我没有滥用您的支持,我非常感激。 - Natysiu16

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块布局执行仅返回单行结果的查询。 同时请注意,您需要更改SELECT语句 - 您现在编写的方式,PL/pgSQL编译器将抱怨它没有地方放置结果(您已请求两个值fn_nam和count(*) + 1),但是您缺少INTO子句。

谢谢korry,我想检查两个答案,但是user_0先发了,再次感谢。我有另一个关于postgreSQL的问题,如果我没有滥用你的支持,我希望你能帮忙检查一下。 - Natysiu16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接