PostgreSQL中DECLARE块变量声明c int报错的原因是什么?
问题分析与解决
你的变量声明语句c int;本身语法是合法的,报错根源是这段PL/pgSQL代码没有被正确包裹在DO语句中执行,导致PostgreSQL将其当作普通SQL解析——而普通SQL不支持DECLARE变量声明语法,因此触发了语法错误。
另外你的代码还有一处不符合规范的地方:raise notice c;的写法错误,PL/pgSQL中raise notice需要用占位符来输出变量值,正确格式为raise notice '%', c;。
修正后的完整代码
DO $$ DECLARE c int; BEGIN execute 'select count(1) from my_dwh.accounts' into c; raise notice '%', c; END $$;
关键说明
- 必须用
DO $$ ... $$包裹PL/pgSQL匿名块,明确告知数据库使用PL/pgSQL语言解析这段代码 raise notice通过%占位符引用变量,不能直接写入变量名
内容的提问来源于stack exchange,提问作者AndroidJoker
相关产品推荐
相关产品推荐

