Questo perché --
fa parte di -->
separatore ma non fa parte di ->
separatore.
Anche se il valore dei tuoi dati ha -->
questa query non dovrebbe generare errori. Come sotto.
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
Il separatore sopra è -->
, nota lo spazio bianco. Questo spazio bianco è considerato come parte del separatore cioè chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. L'intera stringa non fa parte dei dati o del valore della colonna.
Dove come di seguito sarebbe errore
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.
Il separatore sopra è -->
, nota che non ci sono spazi bianchi, ad esempio chr(45)||chr(45)||chr(62)
. L'intera stringa fa effettivamente parte dei dati o del valore della colonna e quindi l'errore.
Ed ecco una soluzione (prestazioni non testate)
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
Spiegazione - Qui (nella query sopra) ->
(con spazio) non fa parte dei dati qui, ad esempio -->
. Una volta che la colonna è collegata tramite il percorso, regexp_replace
sostituisce tutte le occorrenze di ->
con -->
quindi in questo modo avrai ancora -->
come separatore invece di ->
.