Det er fordi --
er en del af -->
separator, men ikke en del af -> separator.
Også selvom din dataværdi har -->
denne forespørgsel bør ikke fejle. Ligesom nedenfor.
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
Separatoren ovenfor er -->
, læg mærke til mellemrummet. Dette mellemrum betragtes som en del af separatoren, dvs. chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Hele denne streng er ikke en del af dine data eller kolonneværdier.
Hvor som nedenfor ville fejle
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.
Separatoren ovenfor er -->
, bemærk, at der ikke er mellemrum, dvs. chr(45)||chr(45)||chr(62)
. Hele denne streng er faktisk en del af din data- eller kolonneværdi og dermed fejlen.
Og her er en løsning (ydeevne ikke-testet)
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
Forklaring - Her (i forespørgslen ovenfor) ->
(med mellemrum) er ikke en del af dataene her, dvs. --> . Når kolonnen er forbundet med stien, er
regexp_replace
erstatter alle forekomster af -> med
--> så på denne måde får du stadig
--> som din separator i stedet for
->
.