Snowflake 循环存储过程

Snowflake Stored Procedure For Loop

我正在使用 Snowflake, 我创建了这个存储过程,它的目的是执行以下步骤:

  1. 从 SQL 查询中提取相关的 'application_id' 值
  2. 在 SQL 查询上使用 FOR 循环,使用我提取的 'application_id' 值 在第 1 步中,从目标 table.
  3. 中删除相关行

当我调用存储过程时,它运行没有错误,但它没有做任何事情(相关记录没有被删除)。

我添加了我的 SP 代码, 如果您看到任何语法/逻辑错误,请告诉我, 谢谢

CREATE OR REPLACE PROCEDURE DWH.sp_testing()
RETURNS string
LANGUAGE javascript
strict
EXECUTE AS owner
AS
$$

try 
{
    var application_list = ` SELECT  application_id
                             FROM PUBLIC.my_source_table_name
                             WHERE my_flag = 1
                           `

    var query_statement = snowflake.createStatement({sqlText: application_list});
    var application_list_result = query_statement.execute();

    for (i = 1; i <= query_statement.getRowCount(); i++) 
    {
        application_list_result.next()
        application_id = application_list_result.getColumnValue(1)   
         

        var delete_daily_records = `
                                DELETE FROM PUBLIC.my_target_table_name AS target
                                WHERE target.application_id = ${application_id}
                            `

        snowflake.execute({sqlText: delete_daily_records});
    }

}

catch (err) 
{
    throw "Failed: " + err; 
}

$$
;

CALL DWH.sp_testing();

您确定您的查询正在返回数据吗?您还确定目标 table 具有与您的 DELETE 语句匹配的数据吗?

使用您的存储过程,以下测试对我有效:

select count(*) from citibike_trips where end_station_id=6215;

returns: 14565

现在,我创建了你的存储过程:

CREATE OR REPLACE PROCEDURE sp_testing()
RETURNS string
LANGUAGE javascript
strict
EXECUTE AS owner
AS
$$

try 
{
    var application_list = `SELECT  end_station_id
                            FROM citibike_trips
                            WHERE end_station_id=6215 limit 10
                           `

    var query_statement = snowflake.createStatement({sqlText: application_list});
    var application_list_result = query_statement.execute();

    for (i = 1; i <= query_statement.getRowCount(); i++) 
    {
        application_list_result.next()
        end_station_id = application_list_result.getColumnValue(1)
        
         

        var delete_daily_records = `
                                DELETE FROM citibike_trips AS target
                                WHERE target.end_station_id = ${end_station_id}
                            `

        snowflake.execute({sqlText: delete_daily_records});
    }
}
catch (err) 
{
    throw "Failed: " + err; 
}

$$
;

运行它:

CALL SP_TESTING();

结果显示为 NULL(预期,因为它没有返回任何内容)。 但是当我再次检查 table 时:

select count(*) from citibike_trips where end_station_id=6215;

returns: 0