Можно ли передать переменное количество параметров хранимой процедуре в красное смещение? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь написать хранимую процедуру в AWS Redshift SQL, и для одного из моих параметров требуется возможность иметь список целых чисел (будет использоваться 'IN (0,100,200, ...)' внутри предложения WHERE). Как бы я записал входной параметр в заголовок процедуры, чтобы это было возможно (если вообще?)

Я пытался передать их как тип типа "целочисленный список" VARCHAR, но тогда не знал, как разобрать это обратно в целые числа.

Обновление: я нашел способ проанализировать строку и просмотреть ее, используя функцию SPLIT_PART, и сохранить все это в таблице. Затем просто используйте таблицу SELECT * FROM с вызовом IN ()

1 Ответ

0 голосов
/ 27 июня 2019

То, что я закончил, было следующим.Я взял целые числа, которые я ожидал, через запятую.Затем я запустил на нем следующее:

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