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 :

Overflow avec dbms_lob.loadclobfromfile


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut Overflow avec dbms_lob.loadclobfromfile
    Bonjour à tous,

    J'utilise la méthode dbms_lob.loadclobfromfile pour uploader des fichiers XML dans ma base de données. Jusqu'ici, tout allait bien, mais depuis peu le fichier semble trop volumineux et me ressort l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ORA-01426: numeric overflow
    ORA-06512: at "MONSCHEMA.INSDB", line 98
    ORA-06512: at line 1
    Comment confirmer cela ? Est-il possible de faire quelque chose ou faut-il chercher un nouveau moyen de faire ?

    Voici l'appel de la fonction dans ma procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dbms_lob.loadclobfromfile(
          L$Blob,       -- CLOB de destination
          L$Bfile,      -- Pointeur de fichier en entrée
          LN$Len,       -- Nombre d'octets à lire
          LN$src_off,   -- Position source de départ
          LN$dst_off,
          LN$Bfile_Csid,
          LN$Lang,
          LN$Warn
        );
    Merci d'avance pour toute remarque !

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Difficile (pour ne pas dire impossible) à debugger ça avec seulement les informations founis. Commencer par nous montrer l'instruction se trouvant à la ligne 98; c'est le loadclobfromfile ou autre ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut
    Voici ma procédure stockée :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    create or replace
    PROCEDURE INSDB
    (
      PC$Filepath IN VARCHAR2
    ) 
    IS
    LN$Curseur NUMBER := 1;
    LN$CurrentPos NUMBER := 1;
    LN$LastPos    NUMBER := 1;
     
    LN$Id  NUMBER := 0;
    LN$BCode  VARCHAR2(255);
    LN$Date  VARCHAR2(255);
    LN$Source VARCHAR2(255);
    LN$IsGoodText VARCHAR2(255);
    LN$IsGood  NUMBER := 0;
    LN$Bfile_Csid VARCHAR2(255) := NLS_CHARSET_ID('UTF8');
    LN$Lang  NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
    LN$Warn NUMBER := 0;
     
    L$Blob CLOB;
    L$Bfile BFILE ;
    LN$Len NUMBER := dbms_lob.lobmaxsize;
    LN$src_off PLS_INTEGER := 1 ;
    LN$dst_off PLS_INTEGER := 1 ;
     
    BEGIN
     
      IF PC$Filepath IS NOT NULL THEN
     
        FOR LN$Curseur IN 1..4
        LOOP
     
          LN$CurrentPos := INSTR(PC$Filepath, '_', LN$LastPos) - LN$LastPos;
     
          CASE LN$Curseur
            WHEN 1 THEN LN$BCode     := SUBSTR(PC$Filepath, LN$LastPos, LN$CurrentPos) ;
            WHEN 2 THEN LN$Date       := SUBSTR(PC$Filepath, LN$LastPos, LN$CurrentPos) ;
            WHEN 3 THEN LN$Source     := SUBSTR(PC$Filepath, LN$LastPos, LN$CurrentPos) ;
            WHEN 4 THEN LN$IsGoodText := SUBSTR(PC$Filepath, LN$LastPos, LN$CurrentPos) ;
          ELSE
            EXIT;
          END CASE;
     
          LN$LastPos := LN$LastPos + LN$CurrentPos + 1;
     
        END LOOP;
     
        CASE UPPER(LN$IsGoodText)
          WHEN 'D' THEN LN$IsGood := 0;
          WHEN 'G' THEN LN$IsGood := 1;
        END CASE;
     
        INSERT INTO MONSCHEMA.uf (I, B, ID, IG, S, D, IP) VALUES (NULL, LN$BCode, LN$Date, LN$IsGood, LN$Source, empty_clob(), 0);
     
        SELECT upseq.currval INTO LN$Id FROM dual;
     
        SELECT datas INTO L$Blob FROM MONSCHEMA.T1 WHERE id = LN$Id FOR  UPDATE;
     
        L$Bfile := BFILENAME( 'DDIR', PC$Filepath );
     
        dbms_lob.fileopen(L$Bfile, dbms_lob.file_readonly);
     
        dbms_lob.loadclobfromfile(
          L$Blob,       -- CLOB de destination
          L$Bfile,      -- Pointeur de fichier en entrée
          LN$Len,       -- Nombre d'octets à lire
          LN$src_off,   -- Position source de départ
          LN$dst_off,
          LN$Bfile_Csid,
          LN$Lang,
          LN$Warn
        );
     
        dbms_lob.fileclose(L$Bfile);
     
        COMMIT;
     
      END IF;
     
      EXCEPTION WHEN OTHERS THEN 
      ROLLBACK;
      RAISE;
     
    END;

    La ligne retournée comme étant en erreur est celle contenant : EXCEPTION WHEN OTHERS THEN

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Votre bloc d'exception en l'état ne sert à rien si ce n'est à perdre la vraie ligne d'erreur.

    Supprimez-le et re-testez !

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Par défaut
    Effectivement, merci pour l'info !

    Du coup, après ré-exécution la ligne en erreur est la 63, elle correspond bien à la fonction dbms_lob.loadclobfromfile.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ca veut dire que vous appelez mal la procédure. Je regarderais

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

Discussions similaires

  1. Message "BCD Overflow" avec ADO sous Delphi6
    Par Gugli dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/01/2008, 18h57
  2. " Stack overFlow " avec IE
    Par lion13 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 21/11/2007, 21h49
  3. problème overflow avec asp
    Par franfr57 dans le forum ASP
    Réponses: 2
    Dernier message: 03/07/2007, 23h50
  4. problème d'overflow avec variable type double
    Par ben83 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 15/02/2007, 09h55
  5. Overflow avec tableau statique
    Par oxor3 dans le forum C++
    Réponses: 2
    Dernier message: 23/12/2005, 06h42

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