--
だからです -->
の一部です 区切り文字ですが、-->
の一部ではありません セパレーター。
データ値に-->
がある場合でも このクエリはエラーになりません。以下のように。
SQL> select Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', ' --> ') "myNewVar"
from dual
connect by rownum<=3;
myNewVar
----------------------------------------------------
--> SomeText B-->More Text:SomeText A-->More Text
--> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text
--> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text --> SomeText B-->More Text:SomeText A-->More Text
上記の区切り文字は-->
です 、空白に注意してください。この空白は、区切り文字の一部と見なされます。つまり、chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
。この文字列全体は、データまたは列の値の一部ではありません。
以下のようにエラーが発生します
SQL> select Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', '-->') "myNewVar"
from dual
connect by rownum<=3;
ORA-30004: when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value
30004. 00000 - "when using SYS_CONNECT_BY_PATH function, cannot have seperator as part of column value"
*Cause:
*Action: Use another seperator which does not occur in any column value,
then retry.
上記の区切り文字は-->
です 、空白がないことに注意してください。つまり、chr(45)||chr(45)||chr(62)
。この文字列全体は、実際にはデータまたは列の値の一部であるため、エラーになります。
そして、これが解決策です(パフォーマンスはテストされていません)
select regexp_replace(Sys_Connect_By_Path('SomeText B-->More Text' || ':' || 'SomeText A-->More Text', ' -> '),' -> ','-->') "myNewVar"
from dual
connect by rownum<=3;
myNewVar
--------------------------------------
-->SomeText B-->More Text:SomeText A-->More Text
-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text
-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text-->SomeText B-->More Text:SomeText A-->More Text
説明- ここ(上記のクエリ)->
(スペースあり)はここのデータの一部ではありません。つまり、->
。列がパスによって接続されると、regexp_replace
-->
のすべての出現を置き換えます -->
を使用 したがって、この方法でも-->
を使用できます。 -->
の代わりにセパレータとして 。