我正在尝试在 AWS Redshift SQL 中编写一个存储过程,我的参数之一需要可能有一个整数列表(将在 WHERE 子句中使用“IN(0,100,200,...)”)。我将如何在过程的标题中写入输入参数,以便这成为可能(如果有的话?)
我尝试将它们作为 VARCHAR“整数列表”类型的内容传递,但不确定如何将其解析回整数。
更新:我找到了一种方法来解析字符串并使用 SPLIT_PART 函数循环遍历它,并将所有这些存储到表中。然后只需使用 SELECT * FROM table 和 IN() 调用
我最终做了如下。我接受了我期望的整数作为逗号分隔的字符串。然后我对其运行了以下命令。
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);
是否可以将参数传递给存储过程?例如,我将数字 5 传递给您,它返回给我仅处理公司 5 的信息?