Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 17h52   #1
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 2
Points : 2
Par défaut Construction dynamique de variable

Bonjour,

Mon problème est simple, je souhaite afficher le contenu d'une variable appelée dynamiquement.

Par exemple:

Code :
1
2
3
4
5
6
7
8
9
MaVariable1 varchar2 := titi;
MaVariable2 varchar2 := toto;
Cpt number :=1;
ChaineRecup varchar2;
 
ChaineRecup := 'MaVariable'||Cpt; -- je veux récupérer titi et non MaVariable1 
 
Cpt := Cpt+1;
ChaineRecup := 'MaVariable'||Cpt; -- je veux récupérer toto et non MaVariable2
Je ne parviens pas à réaliser cela en PL SQL. Mes recherches n'étant pas fructueuses j'espère avoir une réponse avec ce post. Merci

Thomas.
Tombzh56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 18h35   #2
Membre Expert
 
Avatar de Sunchaser
 
Homme Vincent
OPNI
Inscription : décembre 2004
Messages : 1 668
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Âge : 41
Localisation : France, Manche (Basse Normandie)

Informations professionnelles :
Activité : OPNI
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2004
Messages : 1 668
Points : 2 036
Points : 2 036
Bonsoir,

J'imaginerais utiliser un tableau (mais je ne suis pas sur de la finalité, donc juste pour illustrer); qqchose comme:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
DECLARE
     TYPE my_vars IS TABLE OF VARCHAR2 ( 10 CHAR );
 
     temp_vars   my_vars;
     idx_var     INTEGER;
BEGIN
     --
     temp_vars                      := my_vars ( );
     temp_vars.EXTEND ( );
     temp_vars ( temp_vars.LAST )   := 'toto';
     temp_vars.EXTEND ( );
     temp_vars ( temp_vars.LAST )   := 'titi';
     --
     idx_var                        := 1;
     DBMS_OUTPUT.put_line ( 'Valeur ' || idx_var || ': ' || temp_vars ( idx_var ) );
     idx_var                        := 2;
     DBMS_OUTPUT.put_line ( 'Valeur ' || idx_var || ': ' || temp_vars ( idx_var ) );
END;
Ou bien facon "associative array":
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DECLARE
     TYPE my_vars IS TABLE OF VARCHAR2 ( 10 CHAR )
                          INDEX BY VARCHAR2 ( 10 CHAR );
 
     temp_vars   my_vars;
     idx_var     INTEGER;
BEGIN
     idx_var                                := 1;
     temp_vars ( 'parameter' || idx_var )   := 'toto';
     idx_var                                := 2;
     temp_vars ( 'parameter' || idx_var )   := 'titi';
     --
     idx_var                                := 1;
     DBMS_OUTPUT.put_line ( 'Valeur param ' || idx_var || ': ' || temp_vars ( 'parameter' || idx_var ) );
     idx_var                                := 2;
     DBMS_OUTPUT.put_line ( 'Valeur param ' || idx_var || ': ' || temp_vars ( 'parameter' || idx_var ) );
END;
En espérant t'aider,
@+
__________________
Citation:
Aux persévérants aucune route n'est interdite
Question: un ver a pied, c'est un millepatte unijambiste ?

Mon dernier trip musical

Citation:
Quiconque construit un jardin devient un allié de la lumière, aucun jardin n'étant jamais surgi des ténèbres
A priori un proverbe Perse ...
Sunchaser est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/11/2011, 16h53   #3
Invité de passage
 
Inscription : mars 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 7
Points : 2
Points : 2
Merci pour ta réponse Sunchaser.

J'avais pensé à ta solution et je l'ai utilisé, donc je rempli chaque élément de mon tableau à la main; opération dont je me passerais bien en accédant à mes variables de façon dynamique mais le PL ne le permet apparemment pas.

Bonne fin de journée,
Thomas
Tombzh56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 13h57   #4
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Citation:
Envoyé par Tombzh56 Voir le message
Bonjour,

Mon problème est simple, je souhaite afficher le contenu d'une variable appelée dynamiquement.

Par exemple:

Code :
1
2
3
4
5
6
7
8
9
MaVariable1 varchar2 := titi;
MaVariable2 varchar2 := toto;
Cpt number :=1;
ChaineRecup varchar2;
 
ChaineRecup := 'MaVariable'||Cpt; -- je veux récupérer titi et non MaVariable1 
 
Cpt := Cpt+1;
ChaineRecup := 'MaVariable'||Cpt; -- je veux récupérer toto et non MaVariable2
Je ne parviens pas à réaliser cela en PL SQL. Mes recherches n'étant pas fructueuses j'espère avoir une réponse avec ce post. Merci

Thomas.
Tu peux utiliser un TABLE OF (ie, un array) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
DECLARE
  TYPE myArray IS TABLE OF VARCHAR(50);
  maVariable myArray := myArray(); 
  Cpt number :=1;
  ChaineRecup varchar2(100);
BEGIN
  maVariable.EXTEND;
  maVariable(1) := 'Aaa';
  maVariable.EXTEND;
  maVariable(2) := 'Bbb';
  -- Variante : déclarer directement maVariable := myArray('Aaa','Bbb')
  ChaineRecup := maVariable(1);
  DBMS_OUTPUT.put_line(ChaineRecup);
  ChaineRecup := maVariable(2);
  DBMS_OUTPUT.put_line(ChaineRecup);
END;
Rei Ichido est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h27.


 
 
 
 
Partenaires

Hébergement Web