IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

blob vers varchar


Sujet :

Oracle

  1. #1
    Membre chevronné Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Par défaut blob vers varchar
    Bonjour,

    Je cherche à convertir un blob (format code ASCII) en varchar2.

    Le contexte : sous htmldb, les fichiers uploadés par l'utilisateurs sont stockés dans le champs blob_comment de la table htmldb_application_files sous forme héxa (logique, c'est un blob).
    Le pb est que lors de la lecture (voir code ligne suivante), les caractères sont convertis en héxa.

    Si mon blob contient "bonjour oracle", la procédure suivante affiche 626F6E6A6F7572206F7261636C650A, c'est à dire la version asciii-héxa.
    Je préfèrerai nettement pouvoir lire "bonjour oracle"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    DECLARE
      v_blob BLOB;
      v_char VARCHAR(100);
      car_lus BINARY_INTEGER;
      deplacement BINARY_INTEGER;
    
    BEGIN
      -- récupération du blob dans la variable v_blob
      SELECT (blob_content) 
      INTO v_blob
      FROM htmldb_application_files  
      WHERE id=1920505973236324;
    
      -- tentative de lecture
      deplacement:= 1;
      car_lus:= 100;
      DBMS_LOB.READ(v_blob, car_lus, deplacement, v_char);
      dbms_output.put_line(v_char);
    END;
    Le cast n'est pas possible sur un blob, hextoraw ne m'a donné aucun résultat... par ailleurs, je n'ai rien trouvé sur le net (les blob sont considérés comme objet binaire, ce qui est tout à fait logique. En fait, il me faudrait un CLOB, ce qu'htmldb ne me propose pas).

    bref, si vous aviez une idée ou un lien, je suis tout à fait preneur.

    Oraclement,

    Yvan

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Essayez ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      DECLARE
        LR$raw  RAW(32000);
        LC$Content VARCHAR2(32767) ;
      BEGIN
        ...
        -- Read the BLOB
        dbms_lob.READ(GL$Blob, LN$amt, GN$Pos, LR$raw);
        ...
        ...
        LC$Content := utl_raw.cast_to_varchar2(LR$raw) ;
        ...
      END;

  3. #3
    Membre chevronné Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Par défaut
    Malheureusement non : la procédure READ attend un varchar2 comme dernier paramètre. Oracle proteste avec une erreur ORA-06502 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur numérique ou erreur sur une valeur: erreur de conversion de valeurs hex. en valeur brutes

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Quelle est votre version de BDD ?
    Cette fonction est surchargée pour accepter Varchar2 et Raw
    http://sheikyerbouti.developpez.com/...=Chap9#L9.2.25

  5. #5
    Membre chevronné Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Par défaut
    Après un nouvel essais (et peut-être les yeux un peu plus en face des trous)
    CA MARCHE !

    Merci sincèrement pour votre aide, qui a débloqué une situation dans laquelle je me dépêtrais depuis plusieurs jours, et qui (au passage) m'a fait découvrir utl_raw, indispensable dans le cas présent.

    Cordialement,

    Yvan
    ps : pour info, je suis sous Oracle Application Express 2.1. Sqlplus annonce une release 10.2.0.1.0.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire un champ BLOB vers un fichier sur le serveur
    Par ALEX77 dans le forum Firebird
    Réponses: 7
    Dernier message: 24/09/2007, 21h24
  2. Update champs DATE vers VARCHAR
    Par tbastien dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/03/2007, 15h53
  3. Blob vers JSP
    Par Shogun dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/08/2006, 10h27
  4. Passage du type integer vers varchar sur clé primaire
    Par GMI dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/01/2005, 09h09
  5. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo