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
.
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: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 usandoTO_CHAR()
, de la siguiente manera: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:
Si esto arroja un error, podrías intentar primero establecer el blob como nulo usando:
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.