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

标签 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值与参数不同。更新操作从不执行

最佳答案

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

尝试:

/* 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

参见:

关于mysql - 如何将输入的参数值与存储过程mysql中的变量进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33406071/

相关文章:

java - 在java中,对象是否被视为变量?

swift 问题: how can we init an non-optional variable in a if else block if it's of protocol type?

事务中的 MySQL 回滚

database - 在代码中查找未使用的存储过程?

java - Parse.com 数据未保存到不同的表/对象

mysql - 如何从两个表中检索数据

php - SQL 性能 - SELECT COUNT 与 SELECT id 与 LIMIT 1

android - 将一个从适配器类动态变化的整数变量传递给 Activity

php - 有条件地限制 mySQL 的结果数量?

sql-server - TSQL-Merge 中条件匹配时更新和插入