如何将此代码从 netezza 迁移到 db2?

Posted

技术标签:

【中文标题】如何将此代码从 netezza 迁移到 db2?【英文标题】:How i can migrate this code from netezza to db2? 【发布时间】:2019-10-11 08:25:53 【问题描述】:
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?

【问题讨论】:

太棒了!格式化的文字比图片好很多! 在不知道目标 Db2 服务器操作系统(Z/OS、i 系列、Linux/Unix/Windows)和 Db2 版本的情况下无法回答问题。 【参考方案1】:

如果您在p_SeasonsStr 中提供了一些数据样本并且在v_SeasonsStr 中提供了预期的结果,这对那些不熟悉 Netezza 功能的人来说尤其有用。 上面的代码大概可以修改为Db2 for LUW中的一个select语句:

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

【讨论】:

以上是关于如何将此代码从 netezza 迁移到 db2?的主要内容,如果未能解决你的问题,请参考以下文章

从 IBM DB2 迁移到 Netezza 的挑战

从 DB2 迁移到 PostgreSQL-BLOB()/CLOB()

Oracle 到 Netezza 的迁移 - Connect Prior ...开始在 Netezza 中等效

从 Oracle 迁移 VARCHAR2 数据时的列长度

Netezza 从 SQL Server 加载表

Netezza 相关查询