Lo primero que tendrías que hacer es coger el blob de tu tabla con una SELECT a una variable tipo Blob. Por ejemplo:
SELECT IMAGEN
INTO :bBlob
FROM MI_TABLA
WHERE ID = 1;
Ahora, ese blob se lo puedes mandar a la siguiente función:
//--------------------------------------------------------------
// Función : gf_BlobToFile(blob bpArchivo, string srRuta)
// Descripción: Coge un blob y lo guarda en la ruta indicada.
// Parámetros : bpArchivo.- Blob con el fichero.
// srRuta .- Ruta destino del fichero. (C:\Temp\Imagen1.jpeg)
// Devuelve : nada
//--------------------------------------------------------------
Blob bTrozo
long lFichero, lLong = 0, lSize, lPos = 1, lLoops, i
lFichero = FileOpen(srRuta,StreamMode!,Write!,LockReadWrite!,Replace!)
IF lFichero <= 0 THEN Return -1
// Se averigua el número de trozos en que ha de partirse el blob.
lSize = len(bpArchivo)
IF lSize > 32765 THEN
IF Mod(lSize, 32765) = 0 THEN
lLoops = lSize/32765
ELSE
lLoops = (lSize/32765) + 1
END IF
ELSE
lLoops = 1
END IF
// Se guardan los trozos del blob en el fichero.
FOR i = 1 to lLoops
bTrozo = BlobMid(bpArchivo, (((32765 * i) - 32765) + 1), 32765)
FileWrite(lFichero, bTrozo)
NEXT
FileClose(lFichero)
Return 1
NOTA: El fichero debe guardarse con la misma extensión que se guardó el blob. Es decir, si era un .gif, deberías guardarlo .gif. Si era .jpg o .png deberías guardarlo como .jpg o .png. Como fuese en un inicio. Yo siempre que uso blobs tengo otra columna en la tabla donde guardo el nombre de fichero y su extensión, por ejemplo Mi_Imagen.jpeg. Luego recupero ese nombre en un string y es el que uso para guardar el fichero ;) .