2009-12-05 32 views
6

Tengo una tabla en Oracle que almacena archivos como matrices de bytes en un campo BLOB. Quiero que mi cliente pueda descargar el archivo almacenado en pequeños fragmentos (en lugar de descargar todo al mismo tiempo) para que pueda mostrar una barra de progreso.¿Cómo selecciono parte de un campo BLOB en Oracle?

¿Cómo puedo escribir una consulta de Oracle que recupere solo parte del contenido de un campo BLOB? Me imagino que sería algo como esto:

SELECT PARTOF(BLOBFIELD, 1000, 2000) AS CHUNK FROM tbl WHERE ID = 1 

si quería obtener a partir de 1000 bytes BLOBFIELD a partir del byte 2000.

Como una cuestión secundaria, ¿existen problemas de rendimiento con esto? Si Oracle tiene que cargar todo el campo BLOB en la memoria para devolver una parte, entonces esta no sería una buena idea.

+0

sugeriría tratar de resolver este problema de otra manera primero. ¿Qué idioma/marco, etc. usa para hablar con su Oracle db? Estoy pensando que podría simplemente lograr un informe de barra de progreso fuera de las capacidades de Oracle. –

+0

Mis clientes son dispositivos Windows Mobile que llaman a un servicio web ASP.NET. Para que la barra de progreso funcione, los clientes deben poder realizar varias llamadas al servicio web, cada una de las cuales devuelve una parte del archivo general. Para hacer esto, tengo que poder escribir una consulta que devuelva solo una parte de un campo BLOB. – MusiGenesis

+0

Si hubiera almacenado el archivo en el sistema de archivos, no tendría ese problema. –

Respuesta

Cuestiones relacionadas