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

SQL Oracle Discussion :

execute immediate into -une variable- ?


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Par défaut execute immediate into -une variable- ?
    Bonjour à tous,

    Voilà mon code :

    for rec in (select code, libelle from tb_marques ) loop
    Textesql := 'select count(distinct code)/'||nbcli||' '||
    ' from ventes_marques v, clients_marque c '||
    ' where codemarque = '''||rec.code||''' '||
    'and v.codeclient=c.codeclient ';
    Execute immediate Textesql into rec.libelle
    end loop;

    Savez vous comment écrire ça ? (ce qui est en rouge).
    en gros à chaque tour de boucle je voudrais insérer le résultat dans une nouvelle variable (donc le nom de ma variable est variable...)

    Merci pour vos réponses

  2. #2
    Expert confirmé
    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
    Par défaut
    Les variables de curseur sont en lecture seule. Vous n'avez aucune chance de pouvoir en écraser le contenu.

  3. #3
    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
    Citation Envoyé par SheikYerbouti Voir le message
    Les variables de curseur sont en lecture seule. Vous n'avez aucune chance de pouvoir en écraser le contenu.
    Non, on peut les réaffecter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE
    	CURSOR c IS SELECT 1 AS a FROM dual;
    BEGIN
    	FOR r IN c
        LOOP
        	DBMS_OUTPUT.PUT_LINE(r.a);
            r.a := 2;
            DBMS_OUTPUT.PUT_LINE(r.a);
        END LOOP;
    END;
     
    1
    2

  4. #4
    Expert confirmé
    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
    Par défaut
    Ok, j'ai rien dis

  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
    Par contre,
    donc le nom de ma variable est variable
    Ca ne marchera jamais.
    Tu ne peux pas considérer une valeur d'une variable comme étant une variable (je ne connais aucun langage qui l'accepte)

    Quel est le but ?

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Par défaut
    Bonjour,

    Normalement pour ton code lui manque une instruction 'Fetch'
    donc je pense que ça va marcher si tu mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    v_rec                   rec%rowtype;
    for rec in (select code, libelle from tb_marques ) 
    loop
        fetch rec into v_rec;
        Textesql := 'select count(distinct code)/'||nbcli||' '||
        ' from ventes_marques v, clients_marque c '||
        ' where codemarque = '''||rec.code||''' '||
        'and v.codeclient=c.codeclient '; 
    Execute immediate Textesql into v_rec.libelle
    end loop;
    n'est ce pas?
    Bonne journée

  7. #7
    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
    Pas du tout
    Le FETCH c'est si tu utilises le OPEN
    Avec le FOR LOOP, pas de fetch, pas de close, c'est mieux.

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Par défaut du coup j'ai fait autrement
    Merci pour vos réponses,
    voilà comment je m'en suis sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for rec in (select code,libelle from tb_marques) loop
    Textesql := 
    Textesql||' (select count(distinct v.codeclient)/'''||nbcli||'''*100 '||
    ' from ventes_marques v, clients_marque c '||				' where codemarque = '''||rec.code||''' '||
    'and v.codeclient=c.codeclient) '||Rec.libelle||',';
    end loop;
    Textesql := substr(Textesql,1,length(Textesql)-1);
    Textesql := Textesql||' FROM DUAL';
    execute immediate Textesql;
    C'est pas exactement ce que je voulais, donc si qqn sait le faire je suis preneuse.

    @+

  9. #9
    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


    A quoi sert l'EXECUTE IMMEDIATE de ton premier post ?
    C'est pas plus simple de faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FOR rec IN (
    	SELECT t.libelle, COUNT(DISTINCT code) / nbcli * 100
    	FROM ventes_marques v, clients_marque c, tb_marques t
    	WHERE codemarque = t.code
    	AND v.codeclient = c.codeclient
    	GROUP BY t.libelle)
    LOOP
    	IF rec.libelle =  THEN ...
    END LOOP;

Discussions similaires

  1. ORA 00936 Execute Immediate into
    Par jlm22 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 20/05/2011, 17h11
  2. Execute Immediate et bind variables
    Par wanagain35 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 16/03/2010, 14h20
  3. INSERT INTO une variable d'un script shell
    Par sajodia dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 16/05/2008, 16h10
  4. Execution formulaire avec une variable
    Par dsj dans le forum Access
    Réponses: 9
    Dernier message: 08/09/2005, 19h46
  5. Equivalents de EXECUTE IMMEDIATE ... RETURNING INTO ... ?
    Par swirtel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2005, 10h21

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