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 :

[Oracle 8i] LONG RAW


Sujet :

Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable outils métier VIGS (Veolia)
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable outils métier VIGS (Veolia)
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 87
    Points
    87
    Par défaut [Oracle 8i] LONG RAW
    Bonjour,

    Après moultes recherches sous Google, la FAQ et les sources sur le site, je me décide à ouvrir un post concernant le chargement d'une image dans un champ LONG RAW sous ORACLE 8i.

    Le format LONG RAW est Deprecated, mais il nous est imposé par l'outil que nous utilisons.

    L'objectif est de charger une image JPG dans un champ LONG RAW à partir d'un fichier dans un répertoire donné.

    J'ai bien essayé via UTL_FILE, UTL_RAW et aussi avec la méthode des LOB, mais un RETURNING ___ to ___ n'est pas disponible en Oracle 8i.


    Avec le code suivant, j'obtiens l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    -6502-ORA-06502: PL/SQL: numeric or value error: hex to raw conversion error
    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
     
    declare 
      file_data_ LONG RAW;
      file_ UTL_FILE.file_type;
      file_lng_ NUMBER(9);
    begin
         file_ := UTL_FILE.fopen('/d1/ifs/index/ifdt3ifs/sigma1/data/','Base_fond_ess.jpg','rb',32767);
         UTL_FILE.get_line(file_, file_data_);
         file_lng_ := length(file_data_);
         INSERT INTO binary_object_data_block (blob_id, seq, data, length, application_data) VALUES (10,1,utl_raw.cast_to_raw(file_data_),file_lng_,7);
         COMMIT;
         UTL_FILE.fclose(file_);
     
    EXCEPTION WHEN OTHERS THEN
        dbms_output.put_line(sqlcode || '-' || sqlerrm);
    end;
    Description de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> desc binary_object_data_block;
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- 
     BLOB_ID                                   NOT NULL NUMBER
     SEQ                                       NOT NULL NUMBER
     DATA                                               LONG RAW
     LENGTH                                    NOT NULL NUMBER
     APPLICATION_DATA                                   VARCHAR2(2000)
     
    SQL>
    Un petit coup de pouce, je nage un peu (brasse coulée )

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    que donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utl_raw.cast_to_raw(hextoraw(file_data_))

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable outils métier VIGS (Veolia)
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable outils métier VIGS (Veolia)
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 87
    Points
    87
    Par défaut
    Merci Fred_D pour ta réponse.

    Mais où places-tu cette instruction ?
    Je l'avais mise dans l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UTL_FILE.get_line(file_,utl_raw.cast_to_raw(hextoraw(file_data_)));
    mais forcément, le compilateur me rale dessus avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORA-06550: Expression UTL_RAW.CAST_TO_RAW cannot be used as an assignment target

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable outils métier VIGS (Veolia)
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable outils métier VIGS (Veolia)
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 87
    Points
    87
    Par défaut
    Mmh,

    J'ai bien trouvé un autre exemple, mais il utilise une version d'Oracle supérieure.
    Beaucoup de forum explique qu'il n'est pas facilement possible de charger des données d'un fichier dans un LONG RAW via du PL/SQL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    declare
     word_doc long raw;
      f  utl_file.file_type;
    begin
     f := utl_file.fopen('/directory/on/database/server','filename.doc','r',32767);
     utl_file.get_raw(f,word_doc);
     
     insert into your_table (long_word_col) values (word_doc);
     commit;
    end;
    L'instruction get_raw n'est pas disponible sous oracle 8.1.7.

    Y a-t-il une autre solution pour charger un fichier dans un LONG RAW sans passer par UTL_FILE ?

    Désolé Fred_D, mais je ne voie pas comment utiliser la conversion via utl_raw.cast_to_raw.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    désolé... j'ai appris directement avec les LOB et connais donc peu (voir pas ) le type RAW

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable outils métier VIGS (Veolia)
    Inscrit en
    Septembre 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable outils métier VIGS (Veolia)
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 80
    Points : 87
    Points
    87
    Par défaut
    C'est pas grave.

    Après avoir farfouiller le net de long en travers, je ne trouve aucun exemple concret de chargement de LONG RAW dans une table ORACLE depuis du PL/SQL.

    J'abandonne (), même si ca me fait

    Un petit bout de programme en Java solutionnera très bien le problème.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    import java.sql.*;
    import java.io.*;
     
    public class TestLongRaw {
        public static void main (String args[]) {
            if (args.length==0) {
                System.out.println("USAGE: java -classpath .;classes111.zip ExpLongRaw <IP> <port> <SID> <user> <pass> <dest>");
                System.exit(0);
            }
     
            TestLongRaw ess = new TestLongRaw();
            ess.traite(args[0],args[1],args[2],args[3],args[4],args[5]);
        }    
     
        public TestLongRaw() {
        }
     
        public void traite(String ip, String port, String sid, String user, String pass, String dest) {
            Connection conn;   // Holds the connection to the database
            Statement stmt;
            try {
                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                //Class.forName ("oracle.jdbc.driver.OracleDriver");
                conn = DriverManager.getConnection ("jdbc:oracle:thin:@"+ip+":"+port+":"+sid,user,pass);
                File file = new File("d:\\work\\Base_fond_ess.jpg");
                PreparedStatement pstmt = conn.prepareStatement("INSERT INTO binary_object_data_block (blob_id, seq, data, length, application_data) VALUES (?,?,?,?,?)");
                pstmt.setInt(1,10);
                pstmt.setInt(2,1);
                pstmt.setBinaryStream(3,new FileInputStream(file),(int)file.length());
                pstmt.setInt(4,(int)file.length());
                pstmt.setInt(5,7);
                pstmt.execute();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }    
    }
    Merci quand même

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

Discussions similaires

  1. [ORACLE 10G] Extraction LONG RAW sur Disque
    Par blackstreet dans le forum PL/SQL
    Réponses: 2
    Dernier message: 21/11/2008, 10h07
  2. Réponses: 1
    Dernier message: 14/05/2007, 21h36
  3. Réponses: 7
    Dernier message: 03/05/2007, 16h30
  4. [Oracle] Copie LONG RAW depuis un TRIGGER
    Par DarkBassRider dans le forum Oracle
    Réponses: 1
    Dernier message: 09/08/2006, 20h22
  5. Delphi + Conversion Oracle vers Access + LONG RAW
    Par jleg dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/03/2006, 09h35

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