替换功能不能按预期工作

时间:2016-07-10 10:27:23

标签: sql oracle replace informatica

我无法弄清楚为什么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()拆分它 - 每次出现;替换为$ +沿着一条线+再次连接整个字符串(我有另一部分正在拆分字符串)

我认为字符串的长度是影响结果的一些因素,尽管我从未听说过对字符串的长度有任何限制。

 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;,然后停止。如果我从字符串的开头删除一个或多个部分(直到每个部分的分号),那么根据从开始移除的数量,我将它接收到下一个电缆。

为什么会这样?

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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

相关问题