【问题标题】:How to compare an argument value input with a variable in stored procedure mysql?如何将参数值输入与存储过程mysql中的变量进行比较?
【发布时间】:2016-01-29 02:42:50
【问题描述】:

我正在尝试将在过程主体中声明的变量与输入参数进行比较,但结果始终为 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 值与参数不同。从不执行更新操作

【问题讨论】:

  • reg_id 是一个参数和一个列。所以重新考虑一下
  • 尝试检查 v_mi_regId 值并声明第一个 v_mi_regId。

标签: mysql variables stored-procedures parameter-passing


【解决方案1】:

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

试试:

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

见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多