如何将参数值输入与存储过程mysql中的变量进行比较?

时间:2015-10-29 04:41:33

标签: mysql variables stored-procedures parameter-passing

我正在尝试将过程体内声明的变量与输入参数进行比较,但结果始终为false。

这是我的代码:

create procedure UserLogin(email VARCHAR(64),
                           reg_id VARCHAR(355),
                           code_version VARCHAR(10))

        SELECT REG_ID INTO v_mi_regId
        from USUARIO
        where ID_USUARIO = email;

        IF reg_id != v_mi_regId THEN <-- always false

        UPDATE USUARIO 
        SET REG_ID = reg_id
        WHERE ID_USUARIO = email;

        END IF;
END

在USUARIO表中,特定用户的值REG_ID与参数不同。永远不会执行更新操作

1 个答案:

答案 0 :(得分:0)

避免将变量和参数命名为表的列。

尝试:

/* CODE FOR DEMONSTRATION PURPOSES */

DELIMITER //

DROP PROCEDURE IF EXISTS `UserLogin`//

CREATE PROCEDURE `UserLogin`(
  `p_email` VARCHAR(64),
  `p_reg_id` VARCHAR(355),
  `code_version` VARCHAR(10)
)
BEGIN
   DECLARE `v _mi_regId` VARCHAR(355);

   SELECT `REG_ID` INTO `v _mi_regId`
   FROM `USUARIO`
   WHERE `ID_USUARIO` = `p_email`;

   IF `p_reg_id` != `v_mi_regId` THEN
      UPDATE `USUARIO` 
      SET `REG_ID` = `p_reg_id`
      WHERE `ID_USUARIO` = `p_email`;
   END IF;
END//

DELIMITER ;

/* CODE FOR DEMONSTRATION PURPOSES */

SQL Fiddle demo

请参阅: