是否可以在redshift中将可变数量的参数传递给存储过程?

时间:2019-06-25 14:01:58

标签: stored-procedures parameters amazon-redshift

我正在尝试在AWS Redshift SQL中编写存储过程,而我的参数之一需要具有整数列表的可能性(将在WHERE子句中使用'IN(0,100,200,...)')。我如何将输入参数写入过程的标题中,以便有可能(如果有的话)

我尝试将它们作为VARCHAR“整数列表”类型的东西传递,但不确定如何将其解析回int。

更新:我找到了一种使用SPLIT_PART函数解析字符串并循环遍历并将所有这些字符串存储到表中的方法。然后只需将SELECT * FROM表与IN()调用一起使用

1 个答案:

答案 0 :(得分:0)

我最终要做的事情如下。我将期望的整数作为逗号分隔的字符串。然后,我对其进行了以下操作。

CREATE OR REPLACE PROCEDURE test_string_to_int(VARCHAR)
AS $$
DECLARE
    split_me ALIAS FOR $1;
    loop_var INT;
BEGIN
    DROP TABLE IF EXISTS int_list;

    CREATE TEMPORARY TABLE int_list (
            integer_to_store INT
    );

    FOR loop_var IN 1..(REGEXP_COUNT(split_me,',') + 1) LOOP
            INSERT INTO int_list VALUES (CAST(SPLIT_PART(split_me,',',loop_var) AS INT));
    END LOOP;

END;
$$ LANGUAGE plpgsql;

所以我会用类似这样的程序来调用该过程:

CALL test_string_to_int('1,2,3');

并可以对其执行选择语句以查看存储在表中的所有值。然后在查询中需要运行此参数:

.........................
WHERE num_items IN(SELECT integer_to_store FROM int_list);