2016-07-10 5 views
1

REPLACE()が正しく動作しない理由を理解できません。交換機能が正常に動作しない

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

最大4000文字:

私はとしてフォーマットされた文字列を取得しています。

;の各拠点は、新しい文字列を表します(1つの文字列で最大15文字まで)。私はREPLACE()を使用して、それを分割しています - ;の各出現は、$と交換+ラインを下る+再び文字列全体CONCAT(私は文字列を下に分割された別の部分を持っている)

私は、文字列の長さを考えます私は決してリプレイスが文字列の長さについて何らかの種類の制限を持っていると聞いたことはありませんが、結果にどのように影響しますか。

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つ以上の部分を削除すると(セミコラムまでが各部分です)、次のケーブルに接続します。

どうしてですか?

ありがとうございます。

答えて

3

内側のクエリでサンプル入力文字列をto_clob()にラップし、外側のクエリで結果の文字列をlength()にラップすると、結果は8127文字になります。これはあなたの質問に答えますが、部分的にしか答えません。

なぜreplaceがエラーをスローしないのか、または4000文字で結果を切り捨てるのか分かりません。 Oracle 11.2で行ったのと同じ結果が得られました。結果は3503文字後に切り捨てられました。私はちょうどreplace()のOracleのドキュメントを素早く見て、入力がVARCHAR2で出力が4000文字以上の場合の動作を説明していません。可能な限り多くの置換を実行したように見えて停止しました(次の置換は4000文字を超えていました)。

+0

私は、TO_CLOB()を使用してInformaticaで動作した後に、TEXT(50000)にカラムのサイズを増やしてみました。あなたがこれを捕まえる唯一の人だったので答えを受け入れる。ありがとう。 – sagi

関連する問題