2012-08-08 26 views
5

ORA-30004 utilizando SYS_CONNECT_BY_PATH función, no puede tener seperator como parte de la columnaOracle ORA-30004 cuando se utiliza la función SYS_CONNECT_BY_PATH,

Acción: Utilice otro separador que no se produce en cualquier valor de columna , a continuación, volver a intentar.

error en:

select ... 
Sys_Connect_By_Path(myVariable || ':' || mySecondVariable, ' --> ') "myNewVar", 
... 

Obras:

select ... 
Sys_Connect_By_Path(myVariable || ':' || mySecondVariable, ' -> ') "myNewVar", 
... 

En los datos que encontramos un texto como éste

  • SomeText B--More Text
  • SomeText A--More Text

Puesto que no hay '-->' o para el mater no '-->' en los datos ¿por qué el primero de error? El segundo tiene un espacio al frente y al final.

+0

¿Es el espacio en blanco antes y después del ->? – hol

+0

sí - el programador anterior creo que estaba intentando agregar un espacio -> espacio –

+0

¿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

Respuesta

8

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 ->.

+0

Te escucho pero tiene un error cuando tengo el - y cuando lo cambio forma -> a -> funciona. –

+0

Eso es porque '--' es una parte de' -> 'pero no forma parte de' -> ' – Annjawn

+0

El error dice' cuando se usa la función SYS_CONNECT_BY_PATH, no puede haber separador como parte del valor de la columna'su separador '-> 'tiene' - 'en ella, que es una parte del valor de la columna, donde' -> 'no es parte del valor de la columna. – Annjawn

Cuestiones relacionadas