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 :

Interprétation variable dans une autre variable


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Par défaut Interprétation variable dans une autre variable
    Bonjour,

    Voilà mon problème :

    Dans une table T2, j'ai un champ avec la chaîne "var1".

    J'ai une procédure PL/SQL dans laquelle je récupère dans une table T1 une valeur dans une variable qui s'appelle "var1".

    var1 = 'Toto'

    J'ai une autre requête qui va lire ma table T2 et me renvoyer la chaîne "var1" dans une variable "var2".

    var2 = 'var1'

    Ensuite, je construis une requête d'insertion dans une table T3 pour y insérer ma valeur "var1".

    Je veux insérer 'Toto'

    Le problème, c'est qu'à la construction de la requête, je ne sais pas comment récupérer la valeur de "var1" depuis "var2".

    En gros, voici un exemple :

    Table T1 :
    |Champs_T1|
    | var1 |

    Table T2 :
    |Champs_T2|
    | Toto |

    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
    declare
     
    begin
     
      select champs_T2 into var1 from T2;
     
      select champs T1 into var2 from T1;
     
      vInsert := 'insert into T3 (champs T3) values (' || var2 || ')';
     
      execute immediate vInsert;
     
    end;
    La procédure est bien sûr plus compliqué que cela, sinon, j'aurais évidemment tout de suite insérer var1.

    Si quelqu'un à une idée, je suis preneur.

    Merci.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 47
    Par défaut
    Bonjour,

    Je ne comprends pas bien ce que vous voulez exactement, je pense que vous avez essayez de trop simplifier votre contexte au point que ça en devient confus pour moi lecteur.
    Le problème, c'est qu'à la construction de la requête, je ne sais pas comment récupérer la valeur de "var1" depuis "var2".
    La valeur "var1" est contenue dans la variable var2. Dans votre exemple il n'existe pas de valeur "var2", seulement une variable var1 de valeur 'TOTO'. Cette phrase n'a aucune signification dans le contexte que vous présentez.

    Votre problème est mal formulé, je ne perçoit pas les objectifs de vos manipulations avec le résumé de votre procédure.

    Cordialement,

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Oui c'est très confus
    Sinon, pourquoi du dynamique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T3 (Champs3)
    (SELECT Champs2 FROM T2);

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Ce serait aps simplement:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into t3 values (var2);

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Vous n'avez pas compris..
    var1 = 'TOTO'
    var2 = 'var1'

    Il insère toujours var2, c'est la valeur de var2 qui va définir quelle variable insérer.

    var0 = 'TATA'
    var1 = 'TOTO'
    var2 = 'var0'
    Là on insère 'TATA'

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    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
    DECLARE
     var0 VARCHAR2(1):= 'A';
     var1 VARCHAR2(1):= 'B';
     var2 VARCHAR2(5);
     ret VARCHAR2(1);
    BEGIN
    	var2 := 'var0';
    	execute immediate 'declare var0 varchar2(1) := :1; var1 varchar2(1) := :2; begin :3 := '|| var2 ||'; end;' USING IN var0, var1, OUT ret;
      DBMS_OUTPUT.put_line('var2= '||var2 ||'. retour:'|| ret);	
    	var2 := 'var1';
    	execute immediate 'declare var0 varchar2(1) := :1; var1 varchar2(1) := :2; begin :3 := '|| var2 ||'; end;' USING IN var0, var1, OUT ret;
      DBMS_OUTPUT.put_line('var2= '||var2 ||'. retour:'|| ret);	
    END;
     
    var2= var0. retour:A
    var2= var1. retour:B

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Je ne sais pas comment / dans quel contexte est alimentée la ou les variables du type "var1" dans le premier exemple de sql_dev.
    Néanmoins, j'aurais pensé utiliser une collection, un type du genre:
    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
     
     
    DECLARE
         TYPE mytype IS TABLE OF VARCHAR2 ( 60 CHAR )
              INDEX BY VARCHAR2 ( 60 CHAR );
     
         tt             mytype;
         temp_var1      VARCHAR2 ( 60 CHAR );
         temp_var1b     VARCHAR2 ( 60 CHAR );
         temp_var_ind   VARCHAR2 ( 60 CHAR );
         --
         dyn_sql        VARCHAR ( 1000 CHAR );
    --
    BEGIN
         --
         SELECT field1
           INTO temp_var1
           FROM mytable1
          WHERE a_field = a_value;
     
         --
         SELECT field2
           INTO temp_var1b
           FROM mytable2
          WHERE a_field = a_value;
     
         --
         tt ( 'field1' )   := temp_var1;
         tt ( 'field2' )   := temp_var1b;
         --
         temp_var_ind                := 'field2'; --'field1'; --test sur les 2 valeurs
     
         dyn_sql                     := 'insert into T3 (champs T3) values (''' || tt ( temp_var_ind ) || ''')';
     
         DBMS_OUTPUT.put_line ( dyn_sql );
    END;
    @+

  8. #8
    Nouveau candidat au Club
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Par défaut
    Citation Envoyé par McM Voir le message
    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
    DECLARE
     var0 VARCHAR2(1):= 'A';
     var1 VARCHAR2(1):= 'B';
     var2 VARCHAR2(5);
     ret VARCHAR2(1);
    BEGIN
    	var2 := 'var0';
    	execute immediate 'declare var0 varchar2(1) := :1; var1 varchar2(1) := :2; begin :3 := '|| var2 ||'; end;' USING IN var0, var1, OUT ret;
      DBMS_OUTPUT.put_line('var2= '||var2 ||'. retour:'|| ret);	
    	var2 := 'var1';
    	execute immediate 'declare var0 varchar2(1) := :1; var1 varchar2(1) := :2; begin :3 := '|| var2 ||'; end;' USING IN var0, var1, OUT ret;
      DBMS_OUTPUT.put_line('var2= '||var2 ||'. retour:'|| ret);	
    END;
     
    var2= var0. retour:A
    var2= var1. retour:B
    Merci MCM, tu as bien compris ce que je voulais faire mais la complexité de la chose, c'est que mon var0 ne s'appelle pas tout le temps var0.
    J'utilise une requête dynamique parce que ma requête d'insertion varie selon des paramètres lus en base.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/03/2015, 14h47
  2. [VBA]Stocker le nom d'une variable dans une autre variable
    Par strike57 dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/04/2007, 19h09
  3. Definition d'une variable dans une autre variable ...
    Par gbraux dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/12/2005, 15h13
  4. Nom de variable dans une autre variable
    Par lsdInside dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2004, 19h36
  5. [langage] trouver une variable dans une autre
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2004, 15h04

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