2010-05-12 38 views
6

Estoy buscando la sintaxis adecuada (si esto es posible en los procedimientos almacenados de MySQL) para usar operadores lógicos en una instrucción IF THEN. Aquí hay algo parecido a lo que me gustaría hacer, pero no estoy seguro de si debería escribir "O" o "||" en la cláusula IF ... THEN:MySQL Stored Procedure: Boolean Logic in IF THEN

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$$ 

Respuesta

0

No he probado con procedimientos almacenados, pero "o" funciona para desencadenantes. He aquí un fragmento de trabajo de algún código de producción actual:

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

He intentado el procedimiento para asegurarse de que funciona, y lo hace. Además, debería considerar especificar la duración de los tipos de su variable, ej. INT (10).

Tanto los OR y || operadores son correctas (como se indica en el Reference Manual).

+0

intentaron pero no funciona –

+0

qué tipo de mensaje de error (código) Qué se obtiene? los operadores 'OR' y' || 'son correctos. – rekaszeru

0

Creo que debería cambiar el código para tratar con la posibilidad de NULL valores (que podría ser el motivo oculto del error que está experimentando).

Por ejemplo:

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; 
Cuestiones relacionadas