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 :

Découper un champ à l'insertion


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 147
    Points
    147
    Par défaut Découper un champ à l'insertion
    Bonjour,

    Je suis débutant en PL/SQL, et j'aimerai faire la chose suivante :
    Lors de l'insertion ou la modification d'une entrée dans une table, je voudrais que l'une des informations soit découpée suivant un séparateur ("/"), et que les différentes parties récupérées soient affectées dans d'autres champs.

    Exemple :
    Parmi les champs insérés, LIBELLE contient "DIR/SSDIR/SERVICE"
    => à répartir sur les champs PARTIE_1, PARTIE_2 et PARTIE_3

    Pour l'instant, mes essais se sont orientés de la sorte :
    • Création d'une procédure stockée, qui se charge de la mise à jour de l'entrée (paramètres : ID, LIBELLE)
    • Appel de la procédure sur un Trigger d'ajout ou de modification de ma table


    Je n'arrive pas à grand chose pour le moment, mes questions sont donc :
    1. Est-ce que le mécanisme que je tente de mettre en place est le bon ?
    2. Si oui, ne faudrait-il déclencher la procédure que sur la modification du champ LIBELLE (alors qu'il est déclenché sur la ligne entière) pour éviter que ça se morde la queue ?
    3. Comment découper une chaîne selon un séparateur (Pour le moment, j'insère des valeurs bidons pour déjà faire marcher le principe général) ?


    Merci pour vos conseils

  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
    Le principe est bon : une fonction appelée depuis un déclencheur sur INSERT/UPDATE.
    Dans le cas d' Updtae vous pouvez effectivement filtrer la colonne qui vous interresse : ON UPDATE OF LIBELLE ...

    Pour le découpage, je vous conseille ma fonction Split()

    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
    
    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 >0THEN
      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;
    /
    
    que vous pouvez appeler de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      part_1 := Split( LIBELLE, 1, '/' ) ;
      part_2 := Split( LIBELLE, 2, '/' ) ;
      part_3 := Split( LIBELLE, 3, '/' ) ;

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 147
    Points
    147
    Par défaut Merci
    Merci pour votre aide, la solution fonctionne.

    J'ai néanmoins eu recours à la méthode de la table temporaire et du double déclencheur pour éviter l'erreur ORA-04091 de table en mutation.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2006, 15h59
  2. Découper un Champs
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 12/06/2006, 13h23
  3. Découper un champ à l'insertion
    Par gk14fire dans le forum Oracle
    Réponses: 1
    Dernier message: 05/05/2006, 13h38
  4. Découper un champ texte quand on rencontre une virgule
    Par jeanfrancois dans le forum Langage
    Réponses: 7
    Dernier message: 28/04/2006, 12h10
  5. découper un champ (chaine)+(nombre)
    Par r-zo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/08/2003, 12h32

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