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 :

Probleme de LONG


Sujet :

Oracle

  1. #1
    Membre du Club Avatar de schnourf
    Inscrit en
    Mars 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut Probleme de LONG
    Bonjour,

    j'ai une petit soucis de LONG,

    j'ai une requete qui me lit un texte de type LONG dans une table et l'insert dans une autre table.

    voici mon code (un peu simplifié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       FOR btxt IN (SELECT bei_nr, bei_text
                      FROM beitext)
       LOOP
          INSERT INTO historiebei_text
                      (bei_nr, texte
                      )
               VALUES (btxt.bei_nr, bei_text
                      );
     
          COMMIT;
       END LOOP;
    Le champ bei_text est rempli par un programme sur lequel je n'ai aucune influence et ne tronque pas la taille de contenu a 32kb.
    En ce moment j'ai une ligne dans ma table dont le champ bei_text a pour taille 50kb, quand je lance ma procedure, j'obtient une erreur
    ORA-06512: numeric or value error
    . (au niveau du premier select)

    Pas moyen de passer en LOB, ils veulent pas, j'ai deja demandé.
    J'aimerai savoir s'il existe une fonction ou un moyen de tronqué mon champ dans le select de preference ou si ca marche pas un autre moyen.
    Merci de votre reponse.[/quote]

  2. #2
    Membre du Club Avatar de schnourf
    Inscrit en
    Mars 2003
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 66
    Points : 43
    Points
    43
    Par défaut [RESOLU] Probleme de LONG
    C bon j'ai trouvé une solution a mon probleme

    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
       PROCEDURE setlongbeitext (p_query VARCHAR2, beinr VARCHAR2)
       IS
          l_cursor     INTEGER        DEFAULT DBMS_SQL.open_cursor;
          l_n          NUMBER;
          l_long_val   VARCHAR2 (250);
          l_long_len   NUMBER;
          l_buflen     NUMBER         := 250;
          l_curpos     NUMBER         := 0;
          RESULT       LONG;
       BEGIN
          DBMS_SQL.parse (l_cursor, p_query, DBMS_SQL.native);
          --dbms_sql.bind_variable( l_cursor, p_name, p_value );
          DBMS_SQL.define_column_long (l_cursor, 1);
          l_n := DBMS_SQL.EXECUTE (l_cursor);
     
          IF (DBMS_SQL.fetch_rows (l_cursor) > 0)
          THEN
             LOOP
                DBMS_SQL.column_value_long (l_cursor,
                                            1,
                                            l_buflen,
                                            l_curpos,
                                            l_long_val,
                                            l_long_len
                                           );
                l_curpos := l_curpos + l_long_len;
     
                IF l_curpos + l_buflen > 32999
                THEN
                   l_buflen := 32999 - l_curpos;
                   DBMS_SQL.column_value_long (l_cursor,
                                               1,
                                               l_buflen,
                                               l_curpos,
                                               l_long_val,
                                               l_long_len
                                              );
                   l_curpos := l_curpos + l_long_len;
                   RESULT := RESULT || l_long_val;
                   DBMS_OUTPUT.put_line (l_long_val);
                   EXIT;
                END IF;
     
                RESULT := RESULT || l_long_val;
                -- dbms_output.put_line( l_long_val );
                EXIT WHEN l_long_len = 0;
             END LOOP;
          END IF;
     
          UPDATE historiebei_text
             SET texte = RESULT
           WHERE bei_nr = beinr;
     
          --  dbms_output.put_line( '====================' );
          --  dbms_output.put_line( 'Long was ' || l_curpos || ' bytes in length' );
          DBMS_SQL.close_cursor (l_cursor);
       EXCEPTION
          WHEN OTHERS
          THEN
             IF DBMS_SQL.is_open (l_cursor)
             THEN
                DBMS_SQL.close_cursor (l_cursor);
             END IF;
     
             RAISE;
       END setlongbeitext;

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

Discussions similaires

  1. Probleme gestion variable LONG
    Par cyberyan dans le forum SQL
    Réponses: 2
    Dernier message: 04/03/2007, 12h17
  2. probleme avec le type LONG ROW
    Par amigauss dans le forum SQL
    Réponses: 10
    Dernier message: 21/09/2006, 10h29
  3. petit probleme avec un (unsigned long int)
    Par Micks71 dans le forum C
    Réponses: 6
    Dernier message: 19/05/2006, 12h08
  4. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 16h26
  5. Probleme UPDATE resultat trop long
    Par Tonio_1394 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/10/2004, 11h50

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