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 :

[PL/SQL] Transformer une chaine de caractère en variable


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 2
    Points
    2
    Par défaut [PL/SQL] Transformer une chaine de caractère en variable
    Bonjour tout le monde

    j'ai une procédure PL/SQL dans laquelle je recupere 23 champs de type varchar, qui sont les suivants : dom1 , dom2, dom3, ........ dom23

    alors voila mon problème: à l'intérieur de la procédure, je souhaiterais concaténer le "dom" avec les valeurs du "i" dans une boucle pour, de facon à ce que chaque "dom[i]" soit consideré comme une des variables passées en paramètre..

    J'ai essayé avec le code ci-dessous, mais ca ne marche pas car il considère le " 'dom'||i " comme une chaine de caractères et non pas comme une variable..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     FOR i IN 1..23
     
      LOOP
         IF ('dom'||i = 'remp') THEN
            -- REQUETE
          ELSE
           --REQUETE
          END IF;
     
      END LOOP;


    Quelqu'un pourait-il m'éclairer svp ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Aidez-moi je vous en supplie ...
    je dois rendre le projet dans 2 jours et je n'ai toujours pas resolu mon problème...

  3. #3
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Il me semble que ca ne peut fonctionner que si dom[1-23] sont des variables globales declarees dans un package:
    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
    SET SERVEROUTPUT ON SIZE 100000
     
    CREATE OR REPLACE PACKAGE mypack AS
    dom1     VARCHAR2(1) :='A';
    dom2     VARCHAR2(1) :='B';
    dom3     VARCHAR2(1) :='C';
    dom4     VARCHAR2(1) :='D';
    dom5     VARCHAR2(1) :='E';
    dom6     VARCHAR2(1) :='F';
    dom7     VARCHAR2(1) :='G';
    dom8     VARCHAR2(1) :='H';
    dom9     VARCHAR2(1) :='I';
    dom10    VARCHAR2(1) :='J';
    END;
    /
     
    DECLARE 
    dom      VARCHAR2(32000);
     
    FUNCTION append (i INTEGER)
    RETURN VARCHAR2
    IS
    l_string VARCHAR2(32767);
    l_cde    VARCHAR2(32767);
     
    BEGIN
    l_cde := 'BEGIN :var := mypack.dom'||i||'; END;';
    EXECUTE IMMEDIATE l_cde
    USING OUT l_string;
     
    RETURN l_string;
    END;
     
    BEGIN
    FOR i IN 1..10 LOOP
      dom := dom ||append(i);
    END LOOP;
    dbms_output.put_line(dom);
    END;
    /
    =>
    SQL> @dyn2

    Package created.

    ABCDEFGHIJ

    PL/SQL procedure successfully completed.
    Une autre solution consisterait a creer une collection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE 
    TYPE t_list IS TABLE OF VARCHAR2(32767);
    dom_list       t_list;
    dom            VARCHAR2(32767);
    BEGIN
    dom_list := t_list(mypack.dom1,mypack.dom2,mypack.dom3,mypack.dom4,mypack.dom5,mypack.dom6,mypack.dom7,mypack.dom8,mypack.dom9,mypack.dom10);
    FOR i IN 1..10 LOOP
      dom := dom ||dom_list(i);
    END LOOP;
    dbms_output.put_line(dom);
    END;
    /

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut Et un tableau ?
    Bonjour,

    Et tu ne peux pas mettre tes variables dans un tableau ?
    Dom[i] = xx

    Il y a cet excellent article qui pourra t'inspirer:
    http://sheikyerbouti.developpez.com/...age=Chap5#L5.1

Discussions similaires

  1. Transformer une chaine de caractères
    Par lcoulon dans le forum Débuter
    Réponses: 9
    Dernier message: 14/02/2011, 11h14
  2. Transformer une chaine de caractère
    Par Invité dans le forum Django
    Réponses: 3
    Dernier message: 06/03/2009, 09h57
  3. Réponses: 11
    Dernier message: 04/11/2007, 21h32
  4. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  5. Réponses: 2
    Dernier message: 14/01/2005, 15h40

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