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 :

Problème sur procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Points : 102
    Points
    102
    Par défaut Problème sur procédure stockée
    Bonjour à tous,

    je rencontre un petit soucis sur une procèdure stockée avec SQL server.
    J'ai des erreurs de syntaxe qui pop et je sais pas pourquoi

    Je débute avec les procédures stockées donc il y a quelques concepts que je ne maîtrise pas forcément

    voila 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
    create procedure Statistiques as 
    declare @sexe as varchar(50), @etat as varchar(50)
    declare @Total as int
    	@Total = select SUM(cast(cast(POND as varchar(50))as int)) from insee
    	create sexe_cursor CURSOR FOR Select DISTINCT SEXE from insee
    	open sexe_cursor
    	FETCH NEXT FROM sexe_cursor INTO @sexe
    	WHILE (@@FETCH_STATUS = 0)
    		BEGIN
    			create etat_cursor CURSOR FOR Select DISTINCT ETAT_MAT from insee
    			open etat_cursor
    			FETCH NEXT FROM etat_cursor INTO @etat
    			while (@@FETCH_STATUS = 0)
    				BEGIN
    					-- On récupére le total de personnes de chaque Etat et chaque sexe => CASE 
    					declare @TotalCase AS int
    					@TotalCase = select SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE SEXE = @sexe and ETAT_MAT = @etat
    					-- On récupére le total de personnes de chaque Sexe => Ligne
    					declare @totalSexe AS int
    					@totalSexe = Select SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE SEXE = @sexe
    					-- On récupére le total de personnes de chaque Etat => Colonne
    					declare @totalEtat AS int
    					@totalEtat =Select SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE ETAT_MAT = @etat
     
    					declare @freq as float
    					@freq = (@TotalCase/@Total)*100
     
    					declare @pctligne as float
    					@pctligne = (@TotalCase/@totalSexe)*100
     
    					declare @pctCol as float
    					@pctCol = (@TotalCase/@totalEtat)*100
     
    					select @TotalCase, @freq, @pctligne, @pctCol
    				END
    		END
    et les erreurs qui pop :

    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*4
    Syntaxe incorrecte vers '@Total'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*5
    Syntaxe incorrecte vers 'sexe_cursor'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*10
    Syntaxe incorrecte vers 'etat_cursor'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*17
    Syntaxe incorrecte vers '@TotalCase'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*20
    Syntaxe incorrecte vers '@totalSexe'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*23
    Syntaxe incorrecte vers '@totalEtat'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*26
    Syntaxe incorrecte vers '@freq'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*29
    Syntaxe incorrecte vers '@pctligne'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*32
    Syntaxe incorrecte vers '@pctCol'.
    Msg*137, Niveau*15, État*2, Procédure*Statistiques, Ligne*34
    La variable scalaire "@TotalCase" doit être déclarée.


    Si quelqu'un peut m'éclairer sur ces erreurs de syntaxe ça m'aiderai beaucoup
    Je vous remercie pour votre aide.

    Kek's

  2. #2
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Il suffit d'utiliser le mot clef SET.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @freq = (@TotalCase/@Total)*100
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @freq = (@TotalCase/@Total)*100

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Points : 102
    Points
    102
    Par défaut
    Salut à tous,

    Merci darkelend,

    j'ai modifié le code en utilisant le mot-clé SET mais il me reste quelques erreurs qui sont liées au fait que je stocke le résultat d'un select dans une variable.

    Est-ce que cela est possible en général ou y a-t-il une autre méthode ?

    Je sais qui a les curseur mais utiliser un curseur pour récupérer une seule valeur, est-ce vraiment utile ?

    Merci pour votre aidre

    Kek's

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Pour les select, il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @totalEtat = SUM(cast(cast(POND AS varchar(50))AS int)) FROM insee WHERE ETAT_MAT = @etat

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Points : 102
    Points
    102
    Par défaut
    Merci darkelend encore une fois,

    j'ai fais les modifications et j'ai toujours deux erreurs qui persistent

    je te remet le code modifié :

    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
    create procedure Statistiques as 
    declare @sexe as varchar(50), @etat as varchar(50)
    declare @Total as int
    	select @Total = SUM(cast(cast(POND as varchar(50))as int)) from insee
    	create sexe_cursor CURSOR FOR Select DISTINCT SEXE from insee
    	open sexe_cursor
    	FETCH NEXT FROM sexe_cursor INTO @sexe
    	WHILE (@@FETCH_STATUS = 0)
    		BEGIN
    			create etat_cursor CURSOR FOR Select DISTINCT ETAT_MAT from insee
    			open etat_cursor
    			FETCH NEXT FROM etat_cursor INTO @etat
    			while (@@FETCH_STATUS = 0)
    				BEGIN
    					-- On récupére le total de personnes de chaque Etat et chaque sexe => CASE 
    					declare @TotalCase AS int
    					select @TotalCase =  SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE SEXE = @sexe and ETAT_MAT = @etat
    					-- On récupére le total de personnes de chaque Sexe => Ligne
    					declare @totalSexe AS int
    					select @totalSexe = SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE SEXE = @sexe
    					-- On récupére le total de personnes de chaque Etat => Colonne
    					declare @totalEtat AS int
    					select @totalEtat = SUM(cast(cast(POND as varchar(50))as int)) from insee WHERE ETAT_MAT = @etat
     
    					declare @freq as float
    					SET @freq = (@TotalCase/@Total)*100
     
    					declare @pctligne as float
    					SET @pctligne = (@TotalCase/@totalSexe)*100
     
    					declare @pctCol as float
    					SET @pctCol = (@TotalCase/@totalEtat)*100
     
    					select @TotalCase, @freq, @pctligne, @pctCol
    				END
    		END
    et voici les messages d'erreur :

    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*5
    Syntaxe incorrecte vers 'sexe_cursor'.
    Msg*102, Niveau*15, État*1, Procédure*Statistiques, Ligne*10
    Syntaxe incorrecte vers 'etat_cursor'.


    Merci de ton aide

    Kek's

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Supprimez moi ce curseur!
    Il peut (a priori) aisément être remplacé par une seule requete avec GROUP BY sur le sexe...

Discussions similaires

  1. Problème de droit sur procédure stocké
    Par berceker united dans le forum Administration
    Réponses: 0
    Dernier message: 14/10/2011, 20h03
  2. [Débutant(e)] Autorisations sur procédures stockées
    Par boulete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/04/2006, 18h08
  3. Paramètres sur Procédure stockée
    Par StarMusic dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/03/2006, 14h58
  4. PB sur procédure stockée
    Par rafounette dans le forum Oracle
    Réponses: 7
    Dernier message: 09/03/2006, 14h29
  5. Problème de procédure stockée
    Par Sorcier157 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/03/2005, 17h57

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