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

问题描述 投票:0回答:2

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

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

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

stored-procedures parameters amazon-redshift
2个回答
1
投票

我最终做了如下。我接受了我期望的整数作为逗号分隔的字符串。然后我对其运行了以下命令。

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');

并且可以对其执行 select 语句以查看存储到表中的所有值。然后在我的查询中需要运行这个参数:

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

0
投票

是否可以将参数传递给存储过程?例如,我将数字 5 传递给您,它返回给我仅处理公司 5 的信息?

© www.soinside.com 2019 - 2024. All rights reserved.