Bonjour à tous !

J'ai un code qui ne fonctionne pas et je commence à craquer, c'est sur Sybase.

Cette chose boucle à l'infini, alors qu'elle ne devrait faire que 32 itérations (qui est le nb de tupes de la table temporaire #data)



Je fais donc mes déclarations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
DECLARE cur CURSOR for 
	SELECT 
		favor,
		place_id,
		currency_id,
		service_id,
		security_id,	
		date,
		legal_end_session
	FROM #data
GO
 
DECLARE @third_id int,@place_id int, @currency_id int, @service_id int, @security_id int, @date_deal datetime, @comm_indirect float, @legal_end_session datetime



Voila la boucle proprement dite :

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
OPEN cur  
FETCH cur INTO @third_id,@place_id,@currency_id,@service_id,@security_id,@date_deal,@legal_end_session
WHILE @@sqlstatus = 0
BEGIN
 
 
	-- calcul des commissions sur le même titre, après @date_deal jusqu'à la clôture	
	SELECT 	
		@comm_indirect = SUM(...)
	FROM  	
		...
	WHERE	
		...
		AND h.begin_date <= @date_deal AND @legal_end_session <= ISNULL(h.end_date,@legal_end_session)
		AND b.favor       = @third_id
		AND s.place_id    = @place_id
		AND h.currency_id = @currency_id
		AND b.service_id  = @service_id
		AND s.security_id = @security_id
 
		-- on sauvegarde la comm indirecte calculée
		UPDATE #data
		SET 
			indirect_comm = @comm_indirect
		WHERE 
			favor       = @third_id
		AND place_id    = @place_id
		AND date        = @date_deal
		AND currency_id = @currency_id
		AND service_id  = @service_id
		AND security_id = @security_id
		AND legal_end_session = @legal_end_session
 
 
END
 
CLOSE cur
DEALLOCATE CURSOR cur


Si vous voyez quelque chose d'évident qui pourrait expliquer les boucles infinies, je veux bien de votre aide !