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

SQL Oracle Discussion :

[Débutant] Insertion d'un blob dans une table


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut [Débutant] Insertion d'un blob dans une table
    Bonjour,

    Alors voila mon problème. Je voudrai inserer un (plusieurs) BLOB dans une table. Donc, malin, je suis allé voir ici histoire de trouver comment faire. Par contre, quand j'execute ce code, trouvé sur la page en question :
    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
    20
    21
    22
    23
    24
    25
    drop table lob_table;
     
    create table lob_table (key_value number(11), b_col blob);
    insert into lob_table (key_value, b_col) values (12, EMPTY_BLOB());
     
    describe lob_table;
     
    DECLARE
      lob_loc BLOB;
      buffer RAW;
      amt BINARY_INTEGER := 32767;
      pos INTEGER := 2147483647;
      i INTEGER;
    BEGIN
      SELECT b_col INTO lob_loc
      FROM lob_table
      WHERE key_value = 12 FOR UPDATE;
     
      FOR i IN 1..3 LOOP
        dbms_lob.write (lob_loc, amt, pos, buffer);
        -- ...
        pos := pos + amt;
      END LOOP;
     
    END;
    Et bien ca plante, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Table créée.
     1 ligne créée.
     
     KEY_VALUE       NUMBER(11)
     B_COL              BLOB
     
      buffer RAW;
             *
    ERREUR à la ligne 3 :
    ORA-06550: Ligne 3, colonne 10 :
    PLS-00215: Contraintes de longueur de chaîne doivent être incluses ds zone (1 .. 32767)
    Je pensais que le problème venais du fait que ma table est vide, alors j'ai fait un enregistrement avec un BLOB vide, mais rien n'y fait. Alors, euh... Ou est le problème ?

    Merci d'avance !
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faut déclarer une taille pour une variable de type RAW comme pour un VARCHAR2 ou un CHAR d'après PL/SQL User's Guide and Reference

    RAW
    You use the RAW datatype to store binary data or byte strings. For example, a RAW variable might store a sequence of graphics characters or a digitized picture. Raw data is like VARCHAR2 data, except that PL/SQL does not interpret raw data. Likewise, Oracle Net does no character set conversions when you transmit raw data from one system to another.

    The RAW datatype takes a required parameter that lets you specify a maximum size up to 32767 bytes. The syntax follows:

    RAW(maximum_size)


    You cannot use a symbolic constant or variable to specify the maximum size; you must use an integer literal in the range 1 .. 32767.

    The maximum width of a RAW database column is 2000 bytes. So, you cannot insert RAW values longer than 2000 bytes into a RAW column. You can insert any RAW value into a LONG RAW database column because the maximum width of a LONG RAW column is 2**31 bytes. However, you cannot retrieve a value longer than 32767 bytes from a LONG RAW column into a RAW variable.

  3. #3
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    En modifiant la ligne avec le raw et en mettant :
    J'ai une autre erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE
    *
    ERREUR à la ligne 1 :
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur
    ORA-06512: à "SYS.DBMS_LOB", ligne 767
    ORA-06512: à ligne 13
    Sinon, sans partir forcement de cet exemple là, si quelqu'un a un code qui fonctionne pour inserer un BLOB, après, je le mets a ma sauce...
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Voir les commentaires dans Oracle® Database Application Developer's Guide - Large Objects


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    declare
       blob_loc  BLOB;
       rawbuf RAW(10);
       an_offset INTEGER := 1;
       an_amount BINARY_INTEGER := 10;
    BEGIN
       select blob_col into blob_loc from a_table
    where id = 1;
       rawbuf := '1234567890123456789';
       dbms_lob.write(blob_loc, an_amount, an_offset,
    rawbuf);
       commit;
    END;

Discussions similaires

  1. Débutant - lire un liens htm dans une table access..
    Par jaromyr dans le forum Modélisation
    Réponses: 8
    Dernier message: 21/12/2007, 21h26
  2. Réponses: 6
    Dernier message: 09/07/2007, 15h39
  3. [MySQL] Insertion de code HTML dans une table, avec UPDATE
    Par Daedalus31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/02/2007, 12h19
  4. Réponses: 7
    Dernier message: 27/01/2006, 15h57
  5. [débutant] Résultat d'un exec dans une table temporaire
    Par amelie15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/08/2005, 09h14

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