“→” en una cadena de caracteres está causando el error “Carácter XML no válido 001A encontrado en una expresión SQL/XML” (DB2)
Necesito combinar múltiples filas de mi base de datos y, para hacerlo, necesito eliminar algunos caracteres específicos. Utilizo el siguiente código:
REPLACE(
(CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
CONCAT(RTNTXT.LIN_TX,'')
)
) AS CLOB(10024)
) AS VARCHAR(402)
)
),'''',''
) AS NARRATIVE
Una vez que en cualquiera de los registros de <mystring>
tengo el símbolo →, mi consulta muestra una advertencia sobre el carácter XML ilegal 001A.
Intenté seguir algunos consejos de Google y transformar el código a:
REPLACE(
(CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
CONCAT(RTNTXT.LIN_TX,'')
)
) AS CLOB(10024)
) AS VARCHAR(402)
)
),x'1A',''
) AS NARRATIVE
pero el error persiste.
¿Puedes decirme qué puedo modificar en la sintaxis para que funcione correctamente?
davy.ai
Parece que estás tratando de reemplazar un carácter específico en los datos XML usando la función
REPLACE
. El código original reemplaza el carácter
con una cadena vacía. Sin embargo, cuando tienes el signo → en tus datos, muestra una advertencia sobre el carácter XML ilegal 001A.En el código actualizado, estás tratando de reemplazar el valor hexadecimal x’1A’ con una cadena vacía para evitar la advertencia. Sin embargo, parece que esto no funciona.
Una posible solución es reemplazar el carácter específico con una referencia de entidad XML válida. Por ejemplo, puedes reemplazar el signo → con
→
, que es la referencia de entidad para una flecha hacia la derecha. Puedes hacer esto usando la funciónREPLACE
antes de la agregación XML:Esto reemplazará cada aparición de → con la referencia de entidad →.
El código actualizado se verá así:
Esto debería ayudarte a evitar la advertencia sobre caracteres XML ilegales y te permitirá fusionar varias filas de tu base de datos.