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

如何在Snowflake存储过程中获取update查询影响的行数

Snowflake存储过程中获取UPDATE执行影响行数的方案

实现逻辑

Snowflake JavaScript存储过程中,DML语句执行后返回的Statement对象内置getNumRowsAffected()方法,可以直接返回本次INSERT/UPDATE/DELETE操作影响的行数,无需额外计数查询。

完整存储过程实现

修正原有逻辑后的完整代码如下:

CREATE OR REPLACE PROCEDURE prc_upd_tables()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
    let result = '';
    // 生成所有待执行的UPDATE语句,同时保留完整表名用于结果输出
    const getUpdSqlStmt = snowflake.createStatement({
        sqlText: `SELECT 
                    TABLE_CATALOG || '.' || TABLE_SCHEMA || '.' || TABLE_NAME AS full_table_name,
                    'UPDATE ' || full_table_name || ' SET column_cd = 8 WHERE column_cd = 4' AS upd_sql
                  FROM INFORMATION_SCHEMA.TABLES
                  WHERE TABLE_TYPE = 'BASE TABLE'
                  -- 此处可添加自定义过滤条件,筛选需要更新的表范围
                  `
    });
    const updStmtList = getUpdSqlStmt.execute();

    // 逐个执行UPDATE并收集影响行数
    while (updStmtList.next()) {
        const curTableName = updStmtList.getColumnValue('FULL_TABLE_NAME');
        const curUpdSql = updStmtList.getColumnValue('UPD_SQL');
        const execResult = snowflake.execute({sqlText: curUpdSql});
        const rowAffected = execResult.getNumRowsAffected();
        result += `${curTableName} - ${rowAffected} rows\n`;
    }
    return result;
$$;

调用方式与输出示例

执行存储过程调用语句:
CALL prc_upd_tables();
返回结果和需求格式完全一致:

YOUR_DB.YOUR_SCHEMA.Table1 - 24 rows
YOUR_DB.YOUR_SCHEMA.Table2 - 30 rows
YOUR_DB.YOUR_SCHEMA.Table3 - 0 rows
YOUR_DB.YOUR_SCHEMA.Table4 - 73 rows

如果不需要输出完整库名+模式名,可以自行调整full_table_name的拼接规则,仅保留表名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:02