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 :

Problème pour lire dans un tableau ...


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Problème pour lire dans un tableau ...
    Bonjour,

    Je cherche à parser une chaine de caractères, contenant des valeurs séparées par des ';' et alimenter un tableau de chaines :

    1) ma variable "tableau" est déclarée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE tabVarchar IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    2) ensuite, j'alimente mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nRng := 1;
    nPos := INSTR(maChaine, ';');
    WHILE nPos > 0 LOOP
       monTableau(nRng) := SUBSTR(maChaine, 0, nPos-1);
       maChaine := SUBSTR(maChaine, nPos+1);
       nPos := INSTR(maChaine, ';');
       nRng := nRng + 1;
    END LOOP;
    IF maChaine <> '' THEN 
       nRng := nRng + 1;
       monTableau(nRng) := maChaine; 
    END IF;
    Mais quand je veux récupérer des valeurs stockées dans le tableau, ça ne fait rien !!!
    Je fais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uneVariable := monTableau(1);
    Quelqu'un sait-il où est le problème ???

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici une fonction qui fait le boulot

    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
    create or replace FUNCTION Split ( PC$Chaine IN VARCHAR2, PN$Pos IN PLS_INTEGER, PC$Sep IN VARCHAR2 DEFAULT ',' )
    RETURN VARCHAR2
    IS
     LC$Chaine VARCHAR2(32767) := PC$Sep || PC$Chaine ;
     LI$I  PLS_INTEGER ;
     LI$I2 PLS_INTEGER ;
    BEGIN
     LI$I := INSTR( LC$Chaine, PC$Sep, 1, PN$Pos ) ;
     IF LI$I > 0 THEN
        LI$I2 := INSTR( LC$Chaine, PC$Sep, 1, PN$Pos + 1) ;
    	IF LI$I2 = 0 THEN LI$I2 := LENGTH( LC$Chaine ) + 1 ; END IF ;
    	RETURN( SUBSTR( LC$Chaine, LI$I+1, LI$I2 - LI$I-1 ) ) ;
     ELSE
        RETURN NULL ;
     END IF ;
    END;
    vous pouvez alors boucler sur votre chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Declare
      LC$Token  Varchar2(256) ;
      i pls_integer := 1 ;
    Begin
      LOOP
        LC$Token := Split( 'la_chaine', i , ',') ;
        EXIT WHEN LC$Token IS NULL ;
        Dbms_Output.put_line(LC$Token) ;
        i := i + 1 ;
      END LOOP ;
    End ;

Discussions similaires

  1. Problème pour stocker dans un tableau
    Par kevine2710 dans le forum Débuter
    Réponses: 14
    Dernier message: 02/03/2013, 19h08
  2. Réponses: 3
    Dernier message: 04/08/2010, 14h05
  3. Aide pour composer puis écrire & lire dans un tableau
    Par lcoulon dans le forum Débuter
    Réponses: 24
    Dernier message: 10/12/2009, 07h26
  4. Réponses: 3
    Dernier message: 06/05/2009, 17h00
  5. Problème pour lire un csv dans un website
    Par dinguot dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/11/2007, 22h05

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