2010-05-12 8 views
6

Je cherche la syntaxe appropriée (si cela est possible dans les procédures stockées MySQL) pour utiliser les opérateurs logiques dans une instruction IF THEN. Voici quelque chose dans le genre de ce que je voudrais faire, mais je ne suis pas certain si je devrais taper "OU" ou "||" dans la clause IF ... THEN:Procédure stockée MySQL: Logique booléenne dans SI PUIS

DELIMITER $$ 

CREATE PROCEDURE `MyStoredProc` (_id INT) 
BEGIN 

    DECLARE testVal1 INT DEFAULT 0; 
    DECLARE testVal2 INT DEFAULT 0; 

    SELECT value1, value2 INTO testVal1, testVal2 
    FROM ValueTable 
    WHERE id = _id; 

IF testVal1 > 0 OR testVal2 > 0 THEN 

    UPDATE ValueTable 
     SET value1 = (value1+1) 
    WHERE id=_id; 

END IF; 

END$$ 

Répondre

0

Je ne l'ai pas essayé avec des procédures stockées, mais "ou" fonctionne pour les triggers. Voici un extrait de travail sur un code de production actuelle:

CREATE TRIGGER `update_inventory` AFTER INSERT ON `order_updates` FOR EACH ROW 
begin 
    if new.type = 'received' or new.type = 'used' or new.type = 'returned' then 
... 
0

Je viens d'essayer votre procédure pour être sûr qu'il fonctionne, et il le fait. En outre, vous devriez envisager de spécifier la longueur des types de votre variable, par exemple. INT (10).

Les deux OR et || opérateurs sont corrects (comme indiqué dans le Reference Manual).

+0

essayé mais ne fonctionne pas –

+0

quel genre de message d'erreur (code) que vous obtenez? les opérateurs 'OR' et' || 'sont corrects. – rekaszeru

0

Je pense que vous devriez changer le code pour traiter la possibilité de valeurs NULL (ce qui pourrait être la raison cachée de l'erreur que vous rencontrez).

Par exemple:

IF (testVal1 IS NOT NULL AND testVal1 > 0) OR (testVal2 IS NOT NULL AND testVal2 > 0) THEN 

    UPDATE ValueTable 
     SET value1 = (value1+1) 
    WHERE id=_id; 

END IF; 
Questions connexes