PostgreSQL用IF NOT EXISTS判断记录不存在返回结果语法错误如何解决
报错原因
你写的PL/pgSQL匿名块(DO块)不支持直接在内部返回结果集,直接写0 as Success不符合语法规范,因此触发语法报错。
最优解决方案
不需要使用DO块,直接用普通条件查询即可完全匹配你的需求:不存在指定记录时返回目标结果,存在时返回空结果集,不会产生多余的NULL返回,执行后自动走下一条查询:
SELECT 0 AS Success, 'No ID exists' AS Message WHERE NOT EXISTS (SELECT 1 FROM user.permission WHERE permission_id = 1);
若必须使用PL/pgSQL实现
如果后续还有其他逻辑要嵌入块中,可以创建临时函数实现,临时函数仅当前会话有效,不会残留数据库对象:
-- 创建临时校验函数 CREATE OR REPLACE FUNCTION pg_temp.check_permission_exists() RETURNS TABLE (Success INT, Message TEXT) LANGUAGE plpgsql AS $$ BEGIN IF NOT EXISTS (SELECT 1 FROM user.permission WHERE permission_id = 1) THEN RETURN QUERY SELECT 0, 'No ID exists'; END IF; END; $$; -- 调用函数获取结果 SELECT * FROM pg_temp.check_permission_exists();
内容的提问来源于stack exchange,提问作者cp1113
相关产品推荐
相关产品推荐

