Eso es porque --
es una parte del separador -->
pero no forma parte del separador ->
.
Incluso si su valor de datos tiene -->
, esta consulta no debería tener errores. Como abajo.
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
El separador anterior es -->
, observe el espacio en blanco. Este espacio en blanco se considera parte del separador, es decir, chr(1)||chr(45)||chr(45)||chr(62)||chr(1)
. Esta cadena completa no forma parte de los datos ni del valor de la columna.
Cuando, como a continuación se error
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.
El separador anterior es -->
, Note que no hay espacio en blanco es decir chr(45)||chr(45)||chr(62)
. Esta cadena completa es de hecho una parte de los datos o el valor de la columna y, por lo tanto, el error.
Y aquí es una solución (rendimiento no-probado)
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
Explicación - Aquí (en la consulta anterior) ->
(con espacio) no es parte de los datos aquí decir -->
. Una vez que la columna está conectada por ruta, el regexp_replace
reemplaza todas las ocurrencias de ->
con -->
, así de esta manera todavía tiene que tener -->
como su separador en lugar de ->
.
¿Es el espacio en blanco antes y después del ->? – hol
sí - el programador anterior creo que estaba intentando agregar un espacio -> espacio –
¿Hay algún error tipográfico y quiso decir 'SomeText B -> More Text' en lugar de' SomeText B - More Text'? Porque entonces está claro: el espacio en blanco antes y después no es igual. – hol