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 !
Partager