【问题标题】:MySQL Stored Procedure with If...else not executingMySQL 存储过程与 If...else 不执行
【发布时间】:2015-05-22 03:45:36
【问题描述】:
CREATE DEFINER=`root`@`localhost` PROCEDURE `Mobile_ForgotPassword`(IN`v_email` VARCHAR(30), IN `v_valid` INT)
NO SQL
IF (v_valid = 0) THEN
    SELECT email FROM user_registration WHERE email = v_email;
ELSE
    SELECT password FROM user_registration WHERE email = v_email;
END IF;

我有这个 MySQL 存储过程,但它不工作。每当我尝试在 phpmyadmin 上执行此脚本时,在第 4 行出现错误,我有语法错误。当我使用 phpmyadmin 时,分隔符已经动态添加,并且我拥有 root 帐户的权限。我尝试删除 DEFINER 但仍然无法正常工作。据我所知,我没有在脚本中看到任何语法错误,或者我没有得到它。有人吗?

【问题讨论】:

    标签: mysql stored-procedures phpmyadmin


    【解决方案1】:
    CREATE DEFINER=`root`@`localhost` PROCEDURE `Mobile_ForgotPassword`(IN `v_email` VARCHAR(30), IN `v_valid` INT) 
    NO SQL 
    IF (v_valid = 0) THEN 
        SELECT email FROM user_registration WHERE email = v_email LIMIT 1;
    ELSE 
    SELECT password FROM user_registration WHERE email = v_email LIMIT 1; 
    END IF;
    
    1. 从 phpMyAdmin 脚本编辑器下的文本框中删除了默认分隔符

    【讨论】:

      【解决方案2】:

      您需要添加DELIMITER

      DELIMITER |
          CREATE PROCEDURE `Mobile_ForgotPassword`(IN`v_email` VARCHAR(30), IN `v_valid` INT)
          NO SQL
          IF (v_valid = 0) THEN
              SELECT email FROM user_registration WHERE email = v_email;
          ELSE
              SELECT PASSWORD FROM user_registration WHERE email = v_email;
          END IF;
          |
          DELIMITER ;
      

      【讨论】:

      • 不。试过了,失败了。正如我已经提到的,我正在使用 phpmyadmin 来运行这个过程,并且 phpmyadmin 自己添加了分隔符
      • 它在我的 phpmyadmin 和 sqlyog 中运行良好。您只需复制并粘贴到您的 sql 编辑器中并运行查询。
      • 好的,让我再试一次。
      • 我试图运行你给我的脚本。它确实创建了带有此错误的过程:'#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DELIMITER”附近使用正确的语法。 phpmyadmin 在列表中显示过程但没有在其中查询。
      猜你喜欢
      • 1970-01-01
      • 2010-12-13
      • 2018-05-23
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多