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

Développement SQL Server Discussion :

Procédure qui ne "s'arrête" pas


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Procédure qui ne "s'arrête" pas
    Bonjour à tous,

    Je suis débutant donc pardonnez moi si le problème vous semble simple à résoudre.

    J'ai créé une procédure stockée (avec curseur) me permettant de retourner, par client:
    - le nombre de jours de livraison par semaine.
    - le nombre de jours ouvrés par semaine.
    - le nombre de jours "successifs" de livraison.

    J'ai retourné le code dans tous les sens mais je n'arrive pas à finaliser mon projet.

    Les résultats retournés correspondent à ce que je veux mais lorsque j'exécute la procédure stockée, cette dernière ne s'arrête pas .

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    USE MaBase
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- Vérification de la présence de la table dans la base de données et suppression dans l'affirmative
    IF OBJECT_ID('[MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON]', 'U') IS NOT NULL
    	DROP TABLE [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON]
    GO
     
    -- Création de la table servant à contenir les résultats finaux
    CREATE TABLE [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](
    	[Depot] [char](2) NOT NULL,	
    	[Semaine] INTEGER NOT NULL,	
    	[Code_Client] [float] NOT NULL,
    	[Nb_Jours_Livres] INTEGER NOT NULL,
    	[Nb_Jours_Semaine] INTEGER NOT NULL,
    	[Nb_jours_consecutifs] INTEGER NOT NULL,
    	[Annee] INTEGER NOT NULL
    )
    GO
     
    CREATE PROCEDURE [dbo].[sp_frequence_livraison]
    AS 
    BEGIN 
     
    DECLARE @Semaine_encours INT, @Depot_encours CHAR(2), @Client_encours FLOAT, @Date_Liv_encours DATETIME 
    DECLARE @Semaine_suivante INT, @Depot_suivant CHAR(2), @Client_suivant FLOAT, @Date_Liv_suivante DATETIME 
    DECLARE @NbJoursLivres INT, @NbJoursOuvres INT, @NbJoursConsecutifs INT
    DECLARE @Test_passage char(1)
     
    DECLARE MyCursor CURSOR 
    FOR SELECT DISTINCT Depot, Semaine, Code_Client, Date
    	FROM	[MaBase].dbo.LOG_Stats_articles_DI_avec_ITM_Gary
    	GROUP BY Depot, Semaine, Code_Client, Date
    	ORDER BY Depot, Semaine, Code_Client, Date
     
    -- Ouverture du curseur
    OPEN MyCursor
     
    -- Lecture du 1er enregistrement
    FETCH NEXT FROM MyCursor INTO @Depot_encours, @Semaine_encours, @Client_encours, @Date_Liv_encours
    -- Lecture du 2ème enregistrement
    FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
     
    -- Boucle sur le curseur
    WHILE (@@fetch_Status <> -1)
    BEGIN
     
    	-- Boucle sur DEPOTS
    	WHILE (@Depot_encours = @Depot_suivant)
    	BEGIN
     
    		SET @NbJoursOuvres = (SELECT Nb_Jours_Ouvres FROM JOURS_OUVRES WHERE (Semaine = @Semaine_encours) AND (Annee = DATEPART(year, @Date_Liv_encours)))
     
    		-- Boucle sur SEMAINES
    		WHILE (@Semaine_encours = @Semaine_suivante)
    		BEGIN
     
    			SET @NbJoursLivres = 1
    			SET @NbJoursConsecutifs = 0	
    			SET @Test_passage = 'N'
     
    			-- Boucle sur CLIENTS
    			WHILE (@Client_encours = @Client_suivant)
    			BEGIN
     
    				SET @NbJoursLivres = @NbJoursLivres + 1
     
    					IF (DATEADD(day, 1, @Date_Liv_encours) = @Date_Liv_suivante)
    					BEGIN	
     
    						IF @Test_passage = 'N'
    						BEGIN
    							SET @Test_passage = 'O'
    							SET @NbJoursConsecutifs = @NbJoursConsecutifs + 2
    						END
    						ELSE
    						BEGIN 
    							SET @NbJoursConsecutifs = @NbJoursConsecutifs + 1
    						END
     
    					END
    					ELSE
    					BEGIN
    						SET @Test_passage = 'N'
    					END
     
    				-- On copie les données contenues dans les variables "suivantes" dans les variables "encours"
    				SET @Depot_encours = @Depot_suivant
    				SET @Semaine_encours = @Semaine_suivante
    				SET @Client_encours = @Client_suivant 
    				SET @Date_Liv_encours = @Date_Liv_suivante
     
    				-- On passe au client suivant
    				FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
    			END
     
    			-- On insert les données dans la Table
    			INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
    			(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
     
    			-- Next
    			SET @Depot_encours = @Depot_suivant
    			SET @Semaine_encours = @Semaine_suivante
    			SET @Client_encours = @Client_suivant 
    			SET @Date_Liv_encours = @Date_Liv_suivante
     
    			FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
    		END
     
    		INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
    		(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
     
    		-- Next
    		SET @Depot_encours = @Depot_suivant
    		SET @Semaine_encours = @Semaine_suivante
    		SET @Client_encours = @Client_suivant 
    		SET @Date_Liv_encours = @Date_Liv_suivante
     
    		FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
    	END
     
    	INSERT INTO [MaBase_Temp].[dbo].[FREQUENCE_LIVRAISON](Depot, Semaine, Code_Client, Nb_Jours_Livres, Nb_jours_consecutifs, Nb_Jours_Semaine, Annee)
    	(SELECT @Depot_encours, @Semaine_encours, @Client_encours, @NbJoursLivres, @NbJoursConsecutifs, @NbJoursOuvres, DATEPART(year, @Date_Liv_encours))
     
    	-- Next
    	SET @Depot_encours = @Depot_suivant
    	SET @Semaine_encours = @Semaine_suivante
    	SET @Client_encours = @Client_suivant 
    	SET @Date_Liv_encours = @Date_Liv_suivante
     
    	FETCH NEXT FROM MyCursor INTO @Depot_suivant, @Semaine_suivante, @Client_suivant, @Date_Liv_suivante
    END
     
    CLOSE myCursor
    DEALLOCATE myCursor
     
    END
    GO

    Merci pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 886
    Points : 53 092
    Points
    53 092
    Billets dans le blog
    6
    Par défaut
    merci d'indenter votre code et nous indiquer à quoi il sert.
    Utilisez la balise code.

    A +

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2006, 14h32
  2. [PL/SQL]Procédure qui ne se finit pas...
    Par tscoops dans le forum Oracle
    Réponses: 8
    Dernier message: 13/12/2004, 15h53

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