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

PostgreSQL使用RAISE NOTICE记录UPDATE结果报语法错误如何解决?

语法错误原因

你使用的is_updated := UPDATE ...赋值写法不符合PL/pgSQL语法规范:UPDATE语句不会直接返回受影响行数作为可直接赋值的结果,因此SQL解析器处理到UPDATE语句内schema名前的.符号时无法识别语法结构,抛出了42601语法错误。

实现更新结果记录的方案

推荐两种常用的稳定实现方式:

方式1:通过GET DIAGNOSTICS获取影响行数

这是适配所有DML操作的通用写法,直接读取系统诊断信息里的行数统计结果:

do
$BODY$
DECLARE 
is_updated int;
BEGIN
UPDATE my_schema.my_table SET support_email = 'support@gmail.com' WHERE id = '9e7080d9-97d9-4d8b-90c5-c02bf5f04ecd';
-- 读取最近一次DML操作影响的行数
GET DIAGNOSTICS is_updated = ROW_COUNT;
IF is_updated > 0 THEN
     RAISE NOTICE 'Row got updated';
ELSE
    RAISE NOTICE 'No Row is updated';
END IF;
END
$BODY$;

方式2:通过RETURNING结合内置变量判断

如果只需要判断是否有行被更新,可以用更简洁的内置FOUND变量实现:

do
$BODY$
DECLARE 
tmp int;
BEGIN
SELECT 1 INTO tmp
FROM UPDATE my_schema.my_table
    SET support_email = 'support@gmail.com'
    WHERE id = '9e7080d9-97d9-4d8b-90c5-c02bf5f04ecd'
RETURNING 1;

-- FOUND是PL/pgSQL内置变量,自动标记上一次查询是否返回了结果
IF FOUND THEN
     RAISE NOTICE 'Row got updated';
ELSE
    RAISE NOTICE 'No Row is updated';
END IF;
END
$BODY$;

内容的提问来源于stack exchange,提问作者Sujeet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:36:04