循环穿过表存储过程的每一行雪花

发布于 2025-01-24 01:14:49 字数 1362 浏览 3 评论 0原文

create or replace procedure Proc_Name("Trgt_DB" VARCHAR, "Trgt_Schema" VARCHAR, "Trgt_Stage" VARCHAR, "Trgt_Timeframe" VARCHAR, "Trgt_Number_Timeframe" FLOAT)
returns string
language JavaScript
EXECUTE AS CALLER
as
$$

--select all data from table

var select_stmt = `SELECT * FROM ` + Trgt_DB + `.schema.data_table ORDER BY ID`;
    var select_stmt_sql = { sqlText: select_stmt };
    var select_stmt_create = snowflake.createStatement(select_stmt_sql);
    var select_stmt_exec = select_stmt_create.execute();

 

--loop throgh all the external tables 

    while (select_stmt_exec.next()) {

        var TGT_SCHEMA_NAME = select_stmt_exec.getColumnValue(5);
        var TGT_TABLE_NAME = select_stmt_exec.getColumnValue(6);

--delete data from target tables

        var remove_data_tbl = `delete from ` +TGT_SCHEMA_NAME+ `.` +TGT_TABLE_NAME+ ` where SYS_DATE <= DATEADD(` +Trgt_Timeframe+ `,-` +Trgt_Number_Timeframe+ `, current_date())`; 
        var remove_data_tbl_sql = {sqlText: remove_data_tbl }; 
        var remove_data_tbl_create = snowflake.createStatement(remove_data_tbl_sql); 
        var remove_details_exec = remove_data_tbl_create.execute();

CALL Proc_Name('Dev', 'ACQ', 'stage', 'days', 60)

- 我有一个具有所有目标模式,(第5列)和目标表(第6列)的表。我想创建一个循环,该循环通过每个目标表迭代,并从目标表中删除数据,该数据表已超过一定时间表。

- 目前我拥有的代码只会从表中的第一个目标表中删除数据

create or replace procedure Proc_Name("Trgt_DB" VARCHAR, "Trgt_Schema" VARCHAR, "Trgt_Stage" VARCHAR, "Trgt_Timeframe" VARCHAR, "Trgt_Number_Timeframe" FLOAT)
returns string
language JavaScript
EXECUTE AS CALLER
as
$

--select all data from table

var select_stmt = `SELECT * FROM ` + Trgt_DB + `.schema.data_table ORDER BY ID`;
    var select_stmt_sql = { sqlText: select_stmt };
    var select_stmt_create = snowflake.createStatement(select_stmt_sql);
    var select_stmt_exec = select_stmt_create.execute();

 

--loop throgh all the external tables 

    while (select_stmt_exec.next()) {

        var TGT_SCHEMA_NAME = select_stmt_exec.getColumnValue(5);
        var TGT_TABLE_NAME = select_stmt_exec.getColumnValue(6);

--delete data from target tables

        var remove_data_tbl = `delete from ` +TGT_SCHEMA_NAME+ `.` +TGT_TABLE_NAME+ ` where SYS_DATE <= DATEADD(` +Trgt_Timeframe+ `,-` +Trgt_Number_Timeframe+ `, current_date())`; 
        var remove_data_tbl_sql = {sqlText: remove_data_tbl }; 
        var remove_data_tbl_create = snowflake.createStatement(remove_data_tbl_sql); 
        var remove_details_exec = remove_data_tbl_create.execute();

CALL Proc_Name('Dev', 'ACQ', 'stage', 'days', 60)

--I have a table with all of the target schemas, (column 5) and target tables (column 6) in it. I want to create a loop which iterates through each target table and deletes the data from the target table which is past a certain timeframe.

--The code I have at the moment will only delete data from the first target table in the table

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文