Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database postgresql函数创建时出现语法错误_Database_Postgresql_Plpgsql - Fatal编程技术网

Database postgresql函数创建时出现语法错误

Database postgresql函数创建时出现语法错误,database,postgresql,plpgsql,Database,Postgresql,Plpgsql,我正在编写一个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);

我正在编写一个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;
$$;
创建自定义函数\u function1()
返回触发器
语言plpgsql
作为
$$
声明基值为整数;
开始
基本值:=(提取(从现在开始的年份())::整数*1000000000);
如果(currval('custom_sequence')
我的自定义_序列的格式为YYYY0000000000(例如20150000000000)

因此,它基本上(应该)做的是检查基本值(当前年份的最小值)是否大于当前值(当前自定义序列值),并更新自定义序列值。然后,它将为使用函数custom_function2生成的序列返回一个新值(该函数的格式非常简单)

当我尝试执行此操作时,它会告诉我:
在“setval”处或附近出现语法错误

我对postgresql和编写函数都很陌生,所以我可能没有看到明显的错误。如果有人能帮助我,我们将不胜感激。该错误与文档中的解释有关:

40.5.2执行命令时没有结果
[……]

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

执行查询

你应该写:

PERFORM setval('custom_sequence', base_val);

非常感谢你!谢谢你的解释链接