Bonjour, j'ai un souci sur ma base je fait appel a une procedure stockée :

Ps_Client_ChangerStatut

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
DELIMITER $$
 
CREATE DEFINER=`jgibon`@`%` PROCEDURE `Ps_Client_ChangerStatut`(IN iCliId integer, IN iIdCodeStatut integer,IN iIdUser integer)
BEGIN
 
    INSERT  into STATUT_CLIENT (CLI_ID, CODI_ID, STATUTCLI_DATE,UTI_ID) VALUES (iCliId , iIdCodeStatut , now(),iIdUser);
 
END
Le changement de statut declanche le trigger suivant :

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
-- Trigger DDL Statements
DELIMITER $$
 
USE `AesBase_Recette`$$
 
CREATE
DEFINER=`aes_admin`@`%`
TRIGGER `AesBase_Recette`.`Statut_Client_Ajouter`
BEFORE INSERT ON `AesBase_Recette`.`STATUT_CLIENT`
FOR EACH ROW
begin
 
    DECLARE iDone integer DEFAULT 0;
    DECLARE vcCodePos varchar(10);
 
    # déclare les variables qui vont accueillir les données retournées par la requête contenue dans le curseur
    DECLARE iIdCtx Integer;
    DECLARE iIdPosCourrier integer;
    DECLARE iIdPosComptable integer;
    DECLARE iIdPosAdministrative integer;
 
    # déclare le curseur
    DECLARE CurseurCtx CURSOR   FOR 
                                SELECT ctx.CTX_ID, padmi.CODI_ID, pcpta.CODI_ID, pcour.CODI_ID
                                FROM CONTENTIEUX ctx
 
                                inner join CONTRAT ct on ct.CT_ID = ctx.CT_ID 
                                inner join CLIENTS cli on cli.CLI_ID = ct.CLI_ID 
                                inner join POSITIONNEMENT_COURRIER pcour on pcour.CTX_ID = ctx.CTX_ID 
                                inner join POSITIONNEMENT_COMPTABLE pcpta on pcpta.CTX_ID = ctx.CTX_ID
                                inner join POSITIONNEMENT_ADMINISTRATIF padmi on padmi.CTX_ID = ctx.CTX_ID  
 
                                where ct.CLI_ID = new.CLI_ID
 
                                and padmi.POSADMI_DATE = (  SELECT MAX(POSADMI_DATE) 
                                                            FROM POSITIONNEMENT_ADMINISTRATIF 
                                                            WHERE POSITIONNEMENT_ADMINISTRATIF.CTX_ID = ctx.CTX_ID 
                                                            order by POSITIONNEMENT_ADMINISTRATIF.POSADMI_ID DESC)
 
                                and pcpta.POSCPTA_DATE = (  SELECT MAX(POSCPTA_DATE) 
                                                            FROM POSITIONNEMENT_COMPTABLE 
                                                            WHERE POSITIONNEMENT_COMPTABLE.CTX_ID = ctx.CTX_ID 
                                                            order by POSITIONNEMENT_COMPTABLE.POSCPTA_ID DESC)
 
                                and pcour.POSCOUR_DATE = (  SELECT MAX(POSCOUR_DATE) 
                                                            FROM POSITIONNEMENT_COURRIER 
                                                            WHERE POSITIONNEMENT_COURRIER.CTX_ID = ctx.CTX_ID 
                                                            order by POSITIONNEMENT_COURRIER.POSCOUR_ID DESC) group by ctx.CTX_ID;
 
    # déclare un handler pour détecter la fin du jeu d'enregistrements
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET iDone = 1;
 
    SELECT CODI_CODE into vcCodePos from CODIFICATIONS where CODI_ID = new.CODI_ID;
 
    if vcCodePos = 'SCLI_DC' then 
 
        # ouvre le curseur
        OPEN CurseurCtx;
        REPEAT
 
            FETCH CurseurCtx INTO iIdCtx, iIdPosCourrier, iIdPosComptable, iIdPosAdministrative;
 
            if Fs_Get_CodeCodi_ById(iIdPosAdministrative) <> 'PA_ANNU' then 
 
                call Ps_Contentieux_ChangerPosition(iIdCtx, 2, Fs_Get_IdCodi_ByCode('PA_ANNU'), new.UTI_ID, Fs_Get_IdCodi_ByCode('MT_CLIDCD'));
 
            end if;
 
        UNTIL iDone END REPEAT;
        #--------------------------------------------------------------------------------------------------------------------------------------
 
    elseif vcCodePos = 'SCLI_HOS' then 
 
        # ouvre le curseur
        OPEN CurseurCtx;
        REPEAT
 
            FETCH CurseurCtx INTO iIdCtx, iIdPosCourrier, iIdPosComptable, iIdPosAdministrative;
 
            call Ps_Contentieux_Bloquer(iIdCtx ,CURDATE(),DATE_ADD(CURDATE(), INTERVAL 2 MONTH),Fs_Get_IdCodi_ByCode('MT_CLIHOS'), Fs_Get_IdCodi_ByCode('BLOC_AES'));
 
        UNTIL iDone END REPEAT;
        #--------------------------------------------------------------------------------------------------------------------------------------   
 
    elseif vcCodePos = 'SCLI_INC' then 
 
        # ouvre le curseur
        OPEN CurseurCtx;
        REPEAT
 
            FETCH CurseurCtx INTO iIdCtx, iIdPosCourrier, iIdPosComptable, iIdPosAdministrative;
 
            if Fs_Get_CodeCodi_ById(iIdPosAdministrative) <> 'PA_ARRETPS' then 
 
                call Ps_Contentieux_ChangerPosition(iIdCtx, 2, Fs_Get_IdCodi_ByCode('PA_ARRETPS'), new.UTI_ID, Fs_Get_IdCodi_ByCode('MT_PDT'));
 
            end if;
 
        UNTIL iDone END REPEAT;
        #--------------------------------------------------------------------------------------------------------------------------------------    
 
    elseif vcCodePos = 'SCLI_DET' then
 
        # ouvre le curseur
        OPEN CurseurCtx;
        REPEAT
 
            FETCH CurseurCtx INTO iIdCtx, iIdPosCourrier, iIdPosComptable, iIdPosAdministrative;
 
            if Fs_Get_CodeCodi_ById(iIdPosAdministrative) <> 'PA_DETTE' then 
 
                call Ps_Contentieux_ChangerPosition(iIdCtx, 2, Fs_Get_IdCodi_ByCode('PA_DETTE'), new.UTI_ID, Fs_Get_IdCodi_ByCode('MT_CS'));
 
            end if;
 
        UNTIL iDone END REPEAT;
        #-------------------------------------------------------------------------------------------------------------------------------------- 
 
    end if;
 
 
end$$
Tout fonctionne bien sauf ou ça me génère cette erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine Ps_Client_ChangerStatut
Quelqu'un aurai une idée ??