2009-12-05 5 views
6

J'ai une table dans Oracle qui stocke les fichiers sous forme de tableaux d'octets dans un champ BLOB. Je veux que mon client puisse télécharger le fichier stocké en petits morceaux (plutôt que de télécharger le tout en une seule fois) afin de pouvoir afficher une barre de progression.Comment sélectionner une partie d'un champ BLOB dans Oracle?

Comment puis-je écrire une requête Oracle qui récupère uniquement partie du contenu d'un champ BLOB? J'imagine que ce serait quelque chose comme ceci:

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

si je voulais obtenir 1000 octets de BLOBFIELD à partir de l'octet 2000.

Comme une question secondaire, yat-il des problèmes de performance avec cela? Si Oracle doit charger tout le champ BLOB en mémoire pour en retourner une partie, ce ne serait pas une très bonne idée.

+0

Je suggère d'essayer de résoudre ce problème d'une autre manière en premier. Quelle langue/framework etc. utilisez-vous pour parler à votre Oracle db? Je pense que vous pourriez simplement obtenir un rapport de barre de progression en dehors des capacités d'Oracle. –

+0

Mes clients sont des appareils Windows Mobile appelant un service Web ASP.NET. Pour que la barre de progression fonctionne, les clients doivent pouvoir effectuer plusieurs appels au service Web, chacun renvoyant une partie du fichier global. Pour ce faire, je dois être capable d'écrire une requête qui retourne juste un morceau d'un champ BLOB. – MusiGenesis

+0

Si vous aviez stocké le fichier dans le système de fichiers, vous n'auriez pas ce genre de problème. –

Répondre

Questions connexes