PostgreSQL 11创建存储过程提示create附近语法错误如何解决
PostgreSQL 11 创建存储过程语法报错解决方案
报错信息:ERROR: syntax error at or near "create" LINE 4: create or replace procedure transfer(
解决步骤
- 检查
create procedure语句之前的所有SQL是否以分号;结尾。这是触发该报错最常见的原因:前面的语句遗漏分号时,PostgreSQL会将前后语句合并解析,识别为语法错误,补上遗漏的分号即可恢复正常。 - 检查是否存在未闭合的引号、括号等符号。前面语句的未闭合符号会导致解析范围异常延伸到
create语句位置,修正未闭合的符号即可。 - 确认实际运行的PostgreSQL版本为11及以上:执行
SELECT version();即可查看实例版本,11以下版本不支持PROCEDURE语法,需要使用FUNCTION实现对应逻辑。 - 检查是否将
create procedure写在其他执行块(如DO语句块、其他函数/存储过程内部),这类块内不支持直接执行DDL创建存储过程,需要移到块外独立执行。
正确示例代码
-- 前面所有语句必须以分号结尾 CREATE OR REPLACE PROCEDURE transfer( from_account INT, to_account INT, transfer_amount NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN -- 扣减转出账户余额 UPDATE accounts SET balance = balance - transfer_amount WHERE id = from_account; -- 增加转入账户余额 UPDATE accounts SET balance = balance + transfer_amount WHERE id = to_account; COMMIT; END; $$;
内容的提问来源于stack exchange,提问作者ga7202
相关产品推荐
相关产品推荐


