Dat komt omdat --
is een onderdeel van -->
scheidingsteken maar geen onderdeel van ->
scheidingsteken.
Zelfs als uw gegevenswaarde -->
heeft deze query mag niet fout gaan. Zoals hieronder.
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
Het bovenstaande scheidingsteken is -->
, let op de witruimte. Deze witruimte wordt beschouwd als onderdeel van het scheidingsteken, d.w.z. chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Deze hele tekenreeks maakt geen deel uit van uw gegevens- of kolomwaarde.
Waar zoals hieronder een fout zou optreden
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.
Het bovenstaande scheidingsteken is -->
, merk op dat er geen witruimte is, bijv. chr(45)||chr(45)||chr(62)
. Deze hele string is inderdaad een onderdeel van je gegevens- of kolomwaarde en vandaar de fout.
En hier is een oplossing (prestaties niet getest)
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
Uitleg - Hier (in de bovenstaande vraag) ->
(met spatie) maakt geen deel uit van de gegevens hier, d.w.z. -->
. Zodra de kolom is verbonden door een pad, wordt de regexp_replace
vervangt alle voorkomens van ->
met -->
dus op deze manier heb je nog steeds -->
als uw scheidingsteken in plaats van ->
.