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

PL/SQL Oracle Discussion :

Passer une liste dans une procédure stockée


Sujet :

PL/SQL Oracle

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Passer une liste dans une procédure stockée
    Bonjour,

    Je développe une application où j'ai une table Ville est une table Habitant (id, nom, prénom, idVille)
    Je souhaite créer une procédure stockée qui me permet d'ajouter une ville et une liste d'habitant pour cette ville.
    Voici la signature de ma procédure:
    P_HABITANT(ville VARCHAR2(30), listeHabitant VARCHAR(30)) ;
    Je sépare les habitants par un ;
    Les habitants sont donc passés sous forme de liste.
    Je voudrais savoir comment extraire le nom et le prénom des habitants entre les points virgule et les insérer dans ma table Habitant.

    Merci de votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut
    Bonjour totot,

    L'analyse de chaîne de caractère en plsql est assez fastidieuse. Personnellement je ne connais que instr et substr.
    Si vous vous lancez dans un découpage de ce genre avec des boucles pour parcourir la chaîne vous avez intérêt à borner le nombre de tour maxi de boucle...

    Une autre solution plus musclée mais plus élégante est d'utiliser des types objets.
    Vous déclarez un type en tant que liste de chaînes de caractère et vous pouvez passer ce type en paramètre et le manipuler comme une liste dans votre procédure.

    Pozzo

  3. #3
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    totot, si tu illustres ton cas ça sera mieux.
    Pour traitement de chaine caractère tu peux utiliser les expressions régulières.(REGEXP_....)
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    P_HABITANT('Nice', 'Durand Pierre ; Durand Fabien ;')

    Par exemple

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Je ne comprend pas d'où vient cette donnée,d'un fichier plat ou autre?
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    De nul part,

    C'est moi qui passe les paramètres à la mains, je n'est pas d'interface graphique, j'ai juste une bd

  7. #7
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regexp_substr (LA_CHAINE, '[^;]+', 1, 2)
    peut faire l'affaire.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    hello,

    je suis tombé sur votre thread en parcourant le forum ce matin et j'ai peut être une solution qui evite le regexp. voila le code de ma procédure:

    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
    create or replace PROCEDURE CREATE_BAK_TABLES(BAKTABLE_LIST IN VARCHAR2)
    IS
    sSqlStmt VARCHAR2(500) :='';
    table_list dbms_utility.uncl_array;
    table_length PLS_INTEGER;
    ErrNum NUMBER;
    ErrMsg VARCHAR2(500);
    MsgRes VARCHAR2(500);
    
    BEGIN
          dbms_utility.comma_to_table(BAKTABLE_LIST,table_length,table_list);
          FOR i in 1..table_list.count LOOP
    
         mon traitement.......
    
    
          END LOOP;
          
          EXCEPTION
          WHEN OTHERS THEN
          ErrNum := SQLCODE;
          ErrMsg   := SQLCODE||SUBSTR(SQLERRM, 1, 150);
          MsgRes   := ErrMsg;
    END;
    j'utilise le package oracle natif "dbms_utility.comma_to_table".

    je définis ma liste ( ici des noms de tables ) dans une variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEFINE BAKTABLE_LIST = 'TABLE1, TABLE2, TABLE3'
    et je passe cette variable en argument de mon script.

    j'espere que ca pourra aider, bon courage

  9. #9
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par totot Voir le message
    ...
    Les habitants sont donc passés sous forme de liste.
    ...
    Utilisez un type collection dans ce cas.

Discussions similaires

  1. [Débutant] passer d'un tableau à une liste dans une expression lambda
    Par Hepil dans le forum Linq
    Réponses: 8
    Dernier message: 25/06/2013, 17h23
  2. quand je selectionne une valeur dans une liste, retourne une autre valeur
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2008, 14h23
  3. [débutant] Comment gérer une liste dans une liste
    Par Lenoiche dans le forum iReport
    Réponses: 0
    Dernier message: 16/07/2008, 10h41
  4. champ d'une liste lié à une liste dans un autre site
    Par guintolli dans le forum SharePoint
    Réponses: 8
    Dernier message: 08/07/2008, 14h51
  5. Appel d'une liste dans une liste (JSTL)
    Par abalgue dans le forum Hibernate
    Réponses: 4
    Dernier message: 15/06/2007, 10h56

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