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

MS SQL Server Discussion :

[Procédure Stockée] Comment la constuire avec un cursor?


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut [Procédure Stockée] Comment la constuire avec un cursor?
    Bonjour,

    Je n'arrive pas derouler le contenu de ma requête construite à partir de variables via un cursor :

    Voici mon 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    CREATE PROCEDURE [batch_confor_150000_parametre] AS
    BEGIN
     
    --Initialisation des variables
    DECLARE @agence as varchar(250), @nacmpt as varchar(250), @rdj as varchar(250), @montant_min as float, @devise as varchar(5), @rdj_traduc as varchar(250)
    DECLARE @agence_ as varchar(250), @nacmpt_ as varchar(250), @rdj_ as varchar(250), @montant_min_ as float, @devise_ as varchar(5), @rdj_traduc_ as varchar(250)
    DECLARE @sqlwhere as varchar(500), @temp as varchar(250)
     
    --Allez sélectionner les paramètres dans confor_150000_parametre
    SET @agence = ''
    SET @nacmpt = ''
    SET @rdj = ''
    SET @montant_min = ''
    SET @devise = ''
    SET @sqlwhere = ''
    SET @rdj_traduc = ''
     
     
    Declare cursor_parametre CURSOR
    For  SELECT agence, nacmpt, rdj, montant_min, devise, rdj_traduc FROM confor_150000_parametre where etat = '1'
    OPEN cursor_parametre
    	Fetch next from cursor_parametre
    	INTO @agence_, @nacmpt_, @rdj_, @montant_min_, @devise_, @rdj_traduc_
    		WHILE @@Fetch_STATUS = 0
    		BEGIN
    			SET @agence = @agence_			
    			SET @nacmpt = @nacmpt_
    			SET @rdj = @rdj_
    			SET @montant_min = @montant_min_
    			SET @devise = @devise_
    			SET @rdj_traduc = @rdj_traduc_
    		Fetch next from cursor_parametre
    		INTO @agence_, @nacmpt_, @rdj_, @montant_min_, @devise_, @rdj_traduc_
    		END
    	CLOSE cursor_parametre;
    DEALLOCATE  cursor_parametre;
     
    DECLARE @QUERY as varchar(3000)
     
     
    if (@agence) <> '' 	
    	SET @sqlwhere = @sqlwhere + ' and aggest not in ('''+ replace(@agence,',',''',''') + ''')'
     
    if (@nacmpt) <> '' 	
    	SET @sqlwhere = @sqlwhere + ' and nacmpt not in ('''+ replace(@nacmpt,',',''',''') + ''')'
     
    if (@rdj_traduc) <> ''
    BEGIN
    	set @sqlwhere = @sqlwhere + ' '  + @rdj_traduc
    END
     
    if (@montant_min) <> ''
    BEGIN
    	SET @Temp = @montant_min
    	SET @temp = @temp  + '00'
    	WHILE(len(@temp) < 15)
    	BEGIN		
    		SET @temp = '0' + @temp
    	END
    	set @sqlwhere = @sqlwhere + ' '  + ' and substring(mtecrtt, 1, 15) >= ''' + @temp + '''' 
    END
     
    if (@devise) <> '' 	
    	SET @sqlwhere = @sqlwhere + ' and cddevi = '''+ @devise + ''''
     
     
    --PRINT  'select  dtoper, AGGEST, nocpte, nacmpt, intcpt, substring(mtecrtt, 1, 15) as mtecrtt, substring(cddevi, 1, 3) as cddevi, sensec, lbcomp, norgdj from PRODUCTION.FRANCE.CGDBASDEX.CMECELP050 as a  inner join PRODUCTION.FRANCE.CGDBASDEX.FCGCOP0S as b on a.nocpte = b.nocmpt where 1 = 1 ' + @sqlwhere
    --SET @QUERY = 'select  dtoper, AGGEST, nocpte, nacmpt, intcpt, substring(mtecrtt, 1, 15) as mtecrtt, substring(cddevi, 1, 3) as cddevi, sensec, lbcomp, norgdj from PRODUCTION.FRANCE.CGDBASDEX.CMECELP050 as a  inner join PRODUCTION.FRANCE.CGDBASDEX.FCGCOP0S as b on a.nocpte = b.nocmpt where 1 = 1 ' + @sqlwhere
     
    --EXEC (@QUERY)
     
    DECLARE cursor_groupe CURSOR
    FOR EXEC (@QUERY)
    --On ouvre la première boucle
    OPEN cursor_groupe;
    --On passe en paramètre les éléments déclaré ci-dessus
    	FETCH NEXT FROM cursor_groupe into @temp
    	WHILE @@Fetch_STATUS = 0
    	    --Début de la boucle
    	    BEGIN
    		print 'cocuou'
    	 FETCH NEXT FROM cursor_groupe into @temp
    	--Fin de la boucle
    	END
    CLOSE cursor_groupe;
    DEALLOCATE  cursor_groupe;
     
    END
    GO
    Lorsque je fais ceci :
    SET @QUERY = 'select dtoper, AGGEST, nocpte, nacmpt, intcpt, substring(mtecrtt, 1, 15) as mtecrtt, substring(cddevi, 1, 3) as cddevi, sensec, lbcomp, norgdj from PRODUCTION.FRANCE.CGDBASDEX.CMECELP050 as a inner join PRODUCTION.FRANCE.CGDBASDEX.FCGCOP0S as b on a.nocpte = b.nocmpt where 1 = 1 ' + @sqlwhere

    EXEC (@QUERY)
    Ca fonctionne sans soucis mais je ne trouve pas la syntaxe avec le cursor car je dois réinsérer les données dans une table

    Merci

    PS : Je sais que la selection n'a pas le même nombre d'argument mais ca plante avant

    Portekoi

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC ('DECLARE cursor_groupe CURSOR FOR '+ @QUERY)

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Ca me fait une erreur

    Serveur : Msg 170, Niveau 15, État 1, Ligne 1
    Ligne 1 : syntaxe incorrecte vers 'FOR'.
    Serveur : Msg 16916, Niveau 16, État 1, Procédure batch_confor_150000_parametre, Ligne 75
    Un curseur nommé 'cursor_groupe' n'existe pas.
    Serveur : Msg 16916, Niveau 16, État 1, Procédure batch_confor_150000_parametre, Ligne 77
    Un curseur nommé 'cursor_groupe' n'existe pas.
    Serveur : Msg 16916, Niveau 16, État 1, Procédure batch_confor_150000_parametre, Ligne 85
    Un curseur nommé 'cursor_groupe' n'existe pas.
    Serveur : Msg 16916, Niveau 16, État 1, Procédure batch_confor_150000_parametre, Ligne 86
    Un curseur nommé 'cursor_groupe' n'existe pas.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    la syntaxe du texte contenu dans @query est-elle correcte ?

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Oui car quand je fais un print de @Query et que je l'exécute, tout se passe bien

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 90
    Points
    90
    Par défaut
    ce petit test marche donc je voit pas ce quii cloche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    declare @Query varchar(500)
    set @query = ' select id from MaTable'
    EXEC ('DECLARE cursor_groupe CURSOR FOR '+ @QUERY)
    OPEN cursor_groupe;
    CLOSE cursor_groupe;
    DEALLOCATE  cursor_groupe;

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 154
    Points : 110
    Points
    110
    Par défaut
    Arf, je n'avais pas décommenté ma requete @query ^_^

    Je sais, je suis un boulet

    Merci beaucoup en tout cas

Discussions similaires

  1. Procédure stockée : comment faire plus simple / plus fiable ?
    Par allaume dans le forum Accès aux données
    Réponses: 1
    Dernier message: 08/08/2007, 12h17
  2. [Procédure stockée] Comment travailler sur une liste de ...
    Par WwiloO dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/02/2006, 11h22
  3. Procédures stockées SQL Server compatibles avec MySQL ?
    Par Nen'S dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/01/2006, 19h18
  4. Réponses: 3
    Dernier message: 09/11/2004, 14h43
  5. PRocédure stocké, comment appeler avec delphi?
    Par SkyDev dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/04/2004, 18h20

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