Как я могу перенести этот код из netezza в db2? - PullRequest
0 голосов
/ 11 октября 2019
SET v_ArrayLength= ARRAY_COUNT(ARRAY_SPLIT(p_SeasonsStr, ','));
    FOR v_ArrayPos in 1 .. v_ArrayLength LOOP 

    IF  (v_ArrayPos<>v_ArrayLength) THEN
        SET v_SeasonsStrs= v_SeasonsStrs||GET_VALUE_VARCHAR(ARRAY_SPLIT(p_SeasonsStr, ','),v_ArrayPos )||'_'||v_ArrayPos||',';
    ELSE
        SET v_SeasonsStrs= v_SeasonsStrs||GET_VALUE_VARCHAR(ARRAY_SPLIT(p_SeasonsStr, ','),v_ArrayPos )||'_'||v_ArrayPos;       
    END IF;

END LOOP;

как я могу перенести этот код из NETEZZA в DB2?

1 Ответ

0 голосов
/ 11 октября 2019

Было бы хорошо, особенно для тех, кто не знаком с функциями Netezza, если вы предоставили некоторую выборку данных в p_SeasonsStr и ожидаемый результат в v_SeasonsStr.
Приведенный выше код, вероятно, можно изменить только доодин оператор выбора в Db2 for LUW:

select listagg(tok||'_'||seq, ',') within group (order by seq)
into v_SeasonsStrs
from xmltable('for $id in tokenize($s, ",") return <i>{string($id)}</i>' 
passing 
-- 'str1,str2,str3'
p_SeasonsStr
as "s"
columns 
  seq for ordinality
, tok varchar(50) path '.'
) t;

Если вы закомментируете строки с помощью переменной и параметра, раскомментируете закомментированную строку и запускаете полученный оператор, результатом будет: str1_1,str2_2,str3_3

...