You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:36:04