如何在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
相关产品推荐
相关产品推荐

