在Postgres 12.10中声明/赋值变量时为何报错?
PostgreSQL中DECLARE变量报错的原因及解决方法
你遇到的问题是因为PostgreSQL的DECLARE语法不能单独在普通SQL会话中使用,它必须属于PL/pgSQL代码块的一部分——也就是必须配合BEGIN...END结构,放在DO匿名块、函数、存储过程这类PL/pgSQL执行环境里。
正确的写法示例
方式1:使用DO匿名块执行
如果你只是想临时测试变量声明和赋值,可以用DO块来包裹代码:
DO $$ DECLARE x integer := 1; y integer := x + 1; BEGIN -- 这里可以添加变量的使用逻辑,比如打印变量值 RAISE NOTICE 'x的值:%,y的值:%', x, y; END $$;
执行后会在控制台输出变量结果,$$是PL/pgSQL代码的分隔符,用来和外部SQL区分开。
方式2:在函数中使用
如果需要在可复用的逻辑里用变量,可以把代码写在函数中:
CREATE OR REPLACE FUNCTION test_variable() RETURNS void AS $$ DECLARE x integer := 1; y integer := x + 1; BEGIN RAISE NOTICE 'x = %, y = %', x, y; END $$ LANGUAGE plpgsql; -- 调用函数 SELECT test_variable();
关键说明
单独的DECLARE语句在PostgreSQL的普通SQL环境中会被视为语法错误,因为它不属于原生SQL的语法范畴,是PL/pgSQL专属的声明语法,必须放在完整的PL/pgSQL代码块(包含BEGIN...END执行段)内部才能被识别。
内容的提问来源于stack exchange,提问作者Vinyl Warmth
相关产品推荐
相关产品推荐

