Bonjour,

J'aimerai savoir comment faire pour faire un IF dans une procédure stockée. Cela me parait en même temps facile, et pourtant j'ai une erreur :
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
If param_id_category = 0 THEN
     SELECT
	  `CATEGORY`.`CAT_NAME`,
	  `PORTFOLIO_LANG`.`PORT_TITLE`,
	  `PORTFOLIO_LANG`.`PORT_ID`
	FROM
	  `PORTFOLIO` p
	  INNER JOIN `PORTFOLIO_LANG` ON (`p`.`PORT_ID` = `PORTFOLIO_LANG`.`PORT_ID`)
	  INNER JOIN `CATEGORY` ON (`p`.`PORT_CATEGORY_ID` = `CATEGORY`.`CAT_ID`)
	WHERE
	  `CATEGORY`.`CAT_ID` = 1
 
        IF param_limit > 0 THEN
        	LIMIT 0,param_limit
        END IF;
       ;
 
    ELSE
        SELECT
	  `CATEGORY`.`CAT_NAME`,
	  `PORTFOLIO_LANG`.`PORT_TITLE`,
	  `PORTFOLIO_LANG`.`PORT_ID`
	FROM
	  `PORTFOLIO` p
	  INNER JOIN `PORTFOLIO_LANG` ON (`p`.`PORT_ID` = `PORTFOLIO_LANG`.`PORT_ID`)
	  INNER JOIN `CATEGORY` ON (`p`.`PORT_CATEGORY_ID` = `CATEGORY`.`CAT_ID`)
 
        IF param_limit > 0 THEN
        	LIMIT 0,param_limit
        END IF;
         ;
 
   END IF
J'ai essayé de faire de plusieurs manières avec un BEGIN - END, etc, mais çà ne change rien.

D'ailleurs on ne peut pas appliquer ce principe de IF pour ne pas re-écrire toute la requete, comme par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
	  `CATEGORY`.`CAT_NAME`,
	  `PORTFOLIO_LANG`.`PORT_TITLE`,
	  `PORTFOLIO_LANG`.`PORT_ID`
	FROM
	  `PORTFOLIO` p
	  INNER JOIN `PORTFOLIO_LANG` ON (`p`.`PORT_ID` = `PORTFOLIO_LANG`.`PORT_ID`)
	  INNER JOIN `CATEGORY` ON (`p`.`PORT_CATEGORY_ID` = `CATEGORY`.`CAT_ID`)
IF param_id_category = 0 THEN     
	WHERE
	  `CATEGORY`.`CAT_ID` = 1
END IF;
 
;
Merci et bonne journée.
F.