Bonjour.
Je suis stagiare au sein d'une entreprise de production mécanique et mon projet de stage consiste à migrer leur site intranet gérant la maintenance de premier niveau des machines outils, de IIS+sql server vers une solution open source qui est un LAMP+mysql.
N'étant pas en formation de développeur mais de gestionnaire de ressource informatique, j'ai un peu de mal (enfin beaucoup) à adapter les procédures stockées établies sous sql server sur MySql.
Mon souci premier est le fait que MySql ne prenne pas encore en charge les curseurs de type "scroll cursor".
Auriez-vous une parade pour arriver à recréer une procédure sous MySql donnant le même résultat?

Voici la procédure que je dois adapter:
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
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[action_ensemble]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[action_ensemble]
GO
 
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS OFF 
GO
 
CREATE PROCEDURE action_ensemble
 
AS
 
 
DECLARE @machine char(5)
DECLARE @tache char(100)
DECLARE @thisdate datetime
DECLARE @date_dep datetime
DECLARE @date_fin datetime
DECLARE @temp char(10)
 
DECLARE @secteur char(25)
DECLARE @period int
DECLARE @sql char(255)
 
DECLARE C_tache_machine SCROLL CURSOR FOR
 
SELECT nom_machine,nom_tache FROM t_tache_machine  WHERE (t_tache_machine.periode_tache <> 9999 AND t_tache_machine.periode_tache <> 999 ) ORDER by nom_machine
 
OPEN C_tache_machine
 
FETCH NEXT FROM C_tache_machine INTO @machine,@tache
 
WHILE @@FETCH_STATUS = 0
BEGIN
 
 
DECLARE c_date SCROLL CURSOR FOR
SELECT Date_prev FROM T_data WHERE nom_machine =RTRIM(@machine)  AND nom_tache= RTRIM(@tache)  AND date_prev=(select max(date_prev) FROM T_data WHERE nom_machine =  + RTRIM(@machine)   AND nom_tache=  RTRIM(@tache) )
 
 
DECLARE c_donne SCROLL CURSOR FOR
SELECT nom_machine,secteur_machine,nom_tache,periode_tache FROM T_tache_machine WHERE nom_machine =@machine AND nom_tache=@tache AND  (t_tache_machine.periode_tache <> 9999 AND t_tache_machine.periode_tache <> 999 )
 
OPEN C_date
OPEN C_donne
 
FETCH FIRST FROM C_date INTO @thisdate
FETCH FIRST FROM C_donne INTO @machine,@secteur,@tache,@period
SELECT @thisdate
 
IF DATEDIFF(day,@thisdate,GETDATE()) > 31 OR @@FETCH_STATUS <> 0
BEGIN
	SELECT @date_dep = DATEADD(day,- DATEPART(weekday,GETDATE()) + 8,GETDATE())
	SELECT @date_dep = CONVERT(datetime,CONVERT(Varchar(2),DATEPART(day,@date_dep)) + '/' + CONVERT(Varchar(2),DATEPART(mm,@date_dep)) + '/' + CONVERT(Varchar(4),DATEPART(yy,@date_dep)))
	SELECT @date_dep
END 
ELSE 
BEGIN
	SELECT @date_dep = ISNULL(@thisdate,CONVERT(datetime,CONVERT(Varchar(2),DATEPART(day,DATEADD(day,- DATEPART(weekday,GETDATE()) + 8,GETDATE()))) + '/' + CONVERT(Varchar(2),DATEPART(mm,DATEADD(day,- DATEPART(weekday,GETDATE()) + 8,GETDATE()))) + '/' + CONVERT(Varchar(4),DATEPART(yy,DATEADD(day,- DATEPART(weekday,GETDATE()) + 8,GETDATE())))))
END
 
 
SELECT @date_fin=DATEADD(day,- DATEPART(weekday,GETDATE()) + 14,GETDATE())
 
WHILE (SELECT @date_dep )< @Date_fin 
BEGIN
 
 
 
IF (SELECT DATEPART(dw,@date_dep))<6 
BEGIN 
INSERT T_data (nom_machine,secteur_machine,nom_tache,date_prev,periodicite_tache) 
	VALUES (@machine,@secteur,@tache,@date_dep,@period)
END 
SELECT @date_dep = DATEADD(hh,@period * 4 ,@date_dep)
END
 
 
DEALLOCATE C_donne
DEALLOCATE C_date
FETCH NEXT FROM C_tache_machine INTO @machine,@tache
END
 
 
DEALLOCATE C_tache_machine
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
Merci d'avance pour l'aide que vous pourrez m'apporter.

PS: j'ai utilisé tsql2mysql ce qui m'a bien aidé pour le début, mais il n'a pas tout adapté.