替换功能未按预期工作

Replace function doesn't work as expected

我无法弄清楚为什么 REPLACE() 无法正常工作。

我得到的字符串格式为:

RISHON_LEZION-CMTSDV4,Cable7/0/4/U1;RISHON_LEZION-CMTSDV4,Cable7/0/4/U2;RISHON_LEZION-CMTSDV4,Cable7/0/5/U0;.....

最多 4000 个字符。

;的每个点代表一个新的字符串(一个字符串最多可以有15个)。我通过使用 REPLACE() 拆分它 - ; 的每次出现都替换为 $ + 向下一行 + 再次连接整个字符串(我有另一部分正在拆分字符串)

我认为字符串的长度对结果有一定的影响,尽管我从未听说过 replace 对字符串的长度有某种限制。

 SELECT  REPLACE(HOT_ALERTKEY_PK, ';', '$' || CHR(13) || CHR(10) || HOT_ALERTKEY_PK || '$')
 from (SELECT 'RISHON_LEZION-CMTSDV4,Cable7/0/3/U0;RISHON_LEZION-CMTSDV4,Cable7/0/3/U1;RISHON_LEZION-CMTSDV4,Cable7/0/3/U2;RISHON_LEZION-CMTSDV4,Cable7/0/4/U0;RISHON_LEZION-CMTSDV4,Cable7/0/4/U1;RISHON_LEZION-CMTSDV4,Cable7/0/4/U2;RISHON_LEZION-CMTSDV4,Cable7/0/5/U0;RISHON_LEZION-CMTSDV4,Cable7/0/5/U1;RISHON_LEZION-CMTSDV4,Cable7/0/5/U2;RISHON_LEZION-CMTSDV4,Cable7/0/7/U0;RISHON_LEZION-CMTSDV4,Cable7/0/7/U1;RISHON_LEZION-CMTSDV4,Cable7/0/7/U2;RISHON_LEZION-CMTSDV4,Cable7/0/9/U0;RISHON_LEZION-CMTSDV4,Cable7/0/9/U1;RISHON_LEZION-CMTSDV4,Cable7/0/9/U2' as hot_alertkey_pk
   FROM dual)

由于某种原因,这导致正确拆分字符串,直到 cable7/0/5/U0; ,然后停止。如果我从字符串的开头删除一个或多个部分(每个部分到半列),那么我将根据我从开头删除的数量将其添加到下一根电缆。

为什么会这样?

提前致谢。

如果在内查询中将示例输入字符串包裹在 to_clob() 内,而在外查询中将结果字符串包裹在 length() 内,您会发现结果为 8127 个字符。这回答了你的问题,但只是部分回答。

我不确定为什么 replace 没有抛出错误,或者只是将结果截断为 4000 个字符。我得到的结果与您在 Oracle 11.2 中得到的结果完全相同,结果在 3503 个字符后被截断。我只是快速查看了 replace() 的 Oracle 文档,它没有说明如果输入为 VARCHAR2 但输出超过 4000 个字符时的行为应该是什么。看起来好像它执行了尽可能多的替换然后停止了(下一个替换将超过 4000 个字符)。