es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Recuperar o eliminar una fila con un blob en Informix 10.

Estoy usando Informix 10. Usando este comando como sugiere la documentación (bueno, el documento más cercano que pude encontrar):

select lotofile(ctbufdata, "foo!", "client") from trg_send_stxn where ctstamp1=60004300

(al base de datos syscdr), da el error:

7420: Argument (1: lo_id) is invalid.

El mismo error ocurre si intento unload to filename select * from

Si intento eliminar la fila con delete from trg_send_stxn where…, el error es:

(U00001) - blob_destroy: error during processing or invalid LO argument

¿Cómo puedo ver este blob? (Quiero ver su contenido para averiguar de dónde vino).

O; ¿cómo puedo eliminarlo o recuperar de esta aparente corrupción?

Como se sugiere en las respuestas, el comando

select ("0x" || substr(ctbufdata::lvarchar,17,8))::INT sbspace
from trg_send_stxn
where ctstamp1=60004300

produce el resultado 0. Y al eliminar la cláusula where, produce 418 filas todas iguales a 0.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el blob en cuestión puede estar corrupto, como se evidencia por los errores recibidos al tratar de interactuar con él.
    Para ver su contenido, podrías intentar convertir el blob a una cadena hexadecimal usando la función blob_to_hex(), de la siguiente manera:

    select blob_to_hex(ctbufdata) from trg_send_stxn where ctstamp1=60004300
    

    Esto te dará una cadena larga de caracteres hexadecimales que representan el contenido del blob.
    Alternativamente, podrías intentar extraer solamente una porción del blob usando la función substr(), convertido a un formato legible usando TO_CHAR(), de la siguiente manera:

    select to_char(substr(ctbufdata, 1, 1000), 'utf8') from trg_send_stxn where ctstamp1=60004300
    

    Esto te dará los primeros 1000 bytes del blob, decodificados como una cadena UTF-8.
    Si logras recuperar el contenido del blob y decides que ya no es necesario, puedes eliminar la fila usando el siguiente comando:

    delete from trg_send_stxn where ctstamp1=60004300
    

    Si esto arroja un error, podrías intentar primero establecer el blob como nulo usando:

    update trg_send_stxn set ctbufdata = null where ctstamp1=60004300
    

    Y luego ejecutar el comando delete de nuevo.

    Si ninguno de estos enfoques funciona, puede ser necesario consultar con un DBA de Informix más experimentado para investigar más a fondo.

Comments are closed.