【问题标题】:postgresql function creation gives syntax errorpostgresql 函数创建给出语法错误
【发布时间】:2015-07-28 15:41:46
【问题描述】:

我正在编写一个 postgresql 函数,但我似乎无法找到错误所在。 Postgresql 版本为 9.4。
以下是函数:

CREATE FUNCTION custom_function1()
RETURNS trigger
LANGUAGE plpgsql
AS
$$
    DECLARE base_val integer;
    BEGIN
        base_val := (EXTRACT(YEAR FROM now())::integer * 10000000000);

        IF (currval('custom_sequence') < base_val) THEN
            setval('custom_sequence', base_val);
        END IF;

        NEW.id := custom_function2();
        RETURN NEW;
    END;
$$;

我的 custom_sequence 格式为 YYYY0000000000(例如 20150000000000)。

所以这基本上(应该做)是检查 base_val(当年的最小值)是否大于 currval(当前 custom_sequence 值)并更新 custom_sequence 值。然后它为使用函数 custom_function2 生成的序列返回一个新值(稍微格式化它)。

当我尝试执行此操作时,它给了我:
“setval”处或附近的语法错误
我对 postgresql 和编写函数都很陌生,所以我可能没有看到明显的错误。如果有人可以帮助我,将不胜感激,谢谢。

【问题讨论】:

    标签: database postgresql plpgsql


    【解决方案1】:

    错误与文档here中的解释有关:

    40.5.2 执行没有结果的命令
    [...]

    有时评估表达式或 SELECT 查询很有用,但 丢弃结果,例如在调用具有 副作用但没有有用的结果值。要在 PL/pgSQL 中执行此操作,请使用 PERFORM 语句:

    执行查询;

    你应该写:

    PERFORM setval('custom_sequence', base_val);
    

    【讨论】:

    • 非常感谢!并感谢您的解释链接
    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2020-01-12
    • 2017-12-11
    • 2013-09-16
    相关资源
    最近更新 更多