Det beror på att --
är en del av -->
separator men inte en del av ->
separator.
Även om ditt datavärde har -->
den här frågan bör inte felas. Som nedan.
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
Separatorn ovan är -->
, lägg märke till blanktecken. Detta blanksteg betraktas som en del av separatorn, dvs chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Hela den här strängen är inte en del av ditt data- eller kolumnvärde.
Där som nedan skulle fel
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.
Separatorn ovan är -->
, notera att det inte finns något blanksteg, dvs. chr(45)||chr(45)||chr(62)
. Hela denna sträng är verkligen en del av ditt data- eller kolumnvärde och därav felet.
Och här är en lösning (prestanda ej testad)
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
Förklaring - Här (i frågan ovan) ->
(med mellanslag) är inte en del av data här, dvs --> . När kolumnen är sammankopplad med sökvägen
regexp_replace
ersätter alla förekomster av -> med
-->
så på detta sätt får du fortfarande -->
som din separator istället för ->
.