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

Langage SQL Discussion :

commande EXEC dans un curseur


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut commande EXEC dans un curseur
    Bonjour à tous,

    je souhaite utiliser la commande exec lors de la déclaration de mon curseur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE RQT_Cursor CURSOR FOR    EXEC @rqt
    Je souhaite utiliser exec car ma requete est générée avec une variable (la variable remplaçant le nom de la BD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  Distinct(Webs.SiteID) as webID FROM ' + @name + '.dbo.Sites'
    )

    Si je crée une variable @BD et que j'effectue la rqt select * from @DB il me dit Must declare the table variable "@name".

    En utilisant le exec il me dit qu'il y a une erreur de synthaxe au niveau de EXEC, est il possible de déclarer un curseur comme je l'ai fait?

    Si ce n'est pas le cas avez vous une autre solution ?

    Merci d'avance.

    Xavier

  2. #2
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    j'ai trouvé la réponse :

    en fait il suffit de procéder comme cela en déclarant le curseur dans ma variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set @rqt = 'declare cursor ... select ...'
    exec @rqt

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut
    Bonjour,

    "Petit up" parce que ça fait depuis hier que je suis sur ce problème et je ne vois pas de solution... J'avais commencé par écrire "DECLARE curs FOR EXEC..." comme nombreux le font intuitivement et j'ai fini par trouver un début de solution ici. Mais il reste un problème : La déclaration du curseur !

    Si je déclare le curseur sans le définir ("DECLARE curs CURSOR;"), ça ne marche pas.

    Voici un extrait du code :
    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
    CREATE FUNCTION Recuperation(filtre VARCHAR(250)) RETURNS TEXT
     
    BEGIN 
     
    	DECLARE done INT DEFAULT 0;
    	DECLARE result, query TEXT;
    	DECLARE lechamp VARCHAR(200);
    	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
     
    	SET query = CONCAT('DECLARE curs CURSOR FOR SELECT champ FROM table', filtre);
    	EXECUTE query;	
     
    	SET result='';
     
    	OPEN curs;
     
    	REPEAT 
    		FETCH curs INTO lechamp;
    		IF !done THEN 
    			IF(lechamp IS NOT NULL) THEN
    				SET result= CONCAT(result, lechamp);
    			END IF;
    		END IF;
    	UNTIL done END REPEAT;
    	CLOSE curs;
     
    	RETURN result;
     
    END
    La variable 'filtre' contient l'éventuelle clause " WHERE ..." que je souhaite variable.

    Merci pour votre aide...

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut
    Bon, je n'ai toujours pas la solution à cette déclaration de curseur qui ne semble poser de problème qu'à moi, mais j'ai finalement construit mes fonctions et ma requête différemment sans passer par une variable de type TEXT à interpréter comme requête.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commande "exec" dans un script TCL
    Par majemoi dans le forum Tcl/Tk
    Réponses: 2
    Dernier message: 18/08/2011, 20h49
  2. Etoile * dans -command "exec ..."
    Par smjfhqs dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 12/12/2008, 14h03
  3. [2K5] Execution de commande dans un curseur
    Par duc@ti dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/06/2008, 14h46
  4. [Système] commande externe (exec) dans un bloc if
    Par dolly2 dans le forum Langage
    Réponses: 2
    Dernier message: 23/08/2006, 19h53
  5. Réponses: 3
    Dernier message: 22/10/2004, 12h04

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