我正在写一个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;
$$;
我的自定义序列的格式为yyy0000000000(例如20150000000000)。
所以这基本上(应该做的)是检查基值(当前年份的最小值)是否大于currval(当前自定义序列值)并更新自定义序列值。然后,它返回用函数custom_function2生成的序列的一个新值(该函数将其格式化为slighly)。
当我试图执行这个命令时,它给了我:
“setval”处或附近出现语法错误
我对postgresql和编写函数都很陌生,所以我可能没有看到明显的错误。如果有人能帮我,我将不胜感激,谢谢。
最佳答案
这个错误与文档中的解释有关:
40.5.2执行命令没有结果
[…]
有时计算表达式或选择查询很有用,但是
放弃结果,例如在调用
副作用,但没有有用的结果值。要在pl/pgsql中执行此操作,请使用
执行语句:
进行查询;
你应该写:
PERFORM setval('custom_sequence', base_val);
关于database - postgresql函数创建产生语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31681125/