Problème de syntaxe

tochedu8412 Messages postés 2 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 9 juin 2010 - 9 juin 2010 à 14:51
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011 - 18 sept. 2010 à 00:59
Bonjour a tous,je veux faire une procédure stockée, mais je ne trouve pas d'ou l'erreur viens ... Mon but étant de compter le nombre de machines qui sont 'En panne'

Je me retrouve avec une erreur :
Msg 102, Niveau 15, État 1, Procédure pscalc, Ligne 34
Syntaxe incorrecte vers '@nb_mach'.
Msg 102, Niveau 15, État 1, Procédure pscalc, Ligne 42
Syntaxe incorrecte vers 'END'.


Voici mon code


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


-- =============================================
-- Author:
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[pscalc]
-- Add the parameters for the stored procedure here
@nb_mach int output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
declare cursmach cursor for
select num_serie, etat_mach from machine ;
open cursmach;

--Déclaration des variables

declare @etat_mach as varchar(50);

--Parcour de la boucle
while @@FETCH_STATUS = 0
begin
FETCH cursmach INTO @nb_mach , @etat_mach;
--Modification des valeurs
if (@etat_mach = 'En panne')
begin
@nb_mach = (@nb_mach + 1);
end

end

close cursmach;

-- SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END

2 réponses

cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
25 août 2010 à 01:26
Bonjour,

pour la forme :
select count(num_serie) from machine where etat_mach ='En panne' ;


Qui ne tente rien, n'a rien
0
crn_c21 Messages postés 302 Date d'inscription samedi 24 janvier 2004 Statut Membre Dernière intervention 4 février 2011
18 sept. 2010 à 00:59
Un END en trop à la fin

le @nb_mach = (@nb_mach + 1); devra être remplacé par
SET @nb_mach = (@nb_mach + 1);

le Begin et end avant et après @nb_mach = (@nb_mach + 1); ne servent à rien

il manque après le CLOSE cursmach; un :
DEALLOCATE cursmach;


voilà !

et comme la dit Tolliap cette proc ne sert à rien puisque une simple requète donne le même résultat!

Désolé!
0
Rejoignez-nous