Isso porque
--
faz parte de -->
separador, mas não faz parte de ->
separador. Mesmo que seu valor de dados tenha
-->
esta consulta não deve dar erro. Como abaixo. 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
O separador acima é
-->
, observe o espaço em branco. Este espaço em branco é considerado como parte do separador, ou seja, chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Essa string inteira não faz parte dos seus dados ou valor da coluna. Onde como abaixo seria erro
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.
O separador acima é
-->
, observe que não há espaço em branco, ou seja, chr(45)||chr(45)||chr(62)
. Essa string inteira é de fato uma parte de seus dados ou valor de coluna e, portanto, o erro. E aqui está uma solução (desempenho não testado)
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
Explicação - Aqui (na consulta acima)
->
(com espaço) não faz parte dos dados aqui, ou seja, -->
. Assim que a coluna estiver conectada por caminho o regexp_replace
substitui todas as ocorrências de ->
com -->
dessa forma você ainda terá -->
como seu separador em vez de ->
.