如何在PostgreSQL中通过标准函数调用序列?已尝试代码失效求协助
解决通过函数调用序列的问题
你的函数无法运行主要有三个问题:
- 声明了
integer参数但未实际使用,如果不需要额外输入,应该移除该参数 - 错误使用了
IMMUTABLE属性:nextval()会修改序列的状态,属于改变数据库的操作,而IMMUTABLE要求函数结果仅依赖输入且不修改数据库,应替换为VOLATILE(SQL函数默认即为VOLATILE,也可以省略) - RETURN语句语法错误:SQL函数中直接返回表达式即可,不需要添加
select
正确的函数写法(无参数,最常用场景)
CREATE FUNCTION code_sequence() RETURNS integer LANGUAGE SQL VOLATILE RETURN nextval('code_seq');
调用方式:
SELECT code_sequence();
如果需要保留参数(比如后续要扩展逻辑)
CREATE FUNCTION code_sequence(UNUSED integer) RETURNS integer LANGUAGE SQL VOLATILE RETURN nextval('code_seq');
调用方式:
SELECT code_sequence(0); -- 传入任意整数即可
补充说明
- 确保
code_seq序列已存在,若未创建可执行:
CREATE SEQUENCE code_seq START 1;
内容的提问来源于stack exchange,提问作者Jim Macaulay
相关产品推荐
相关产品推荐

