我有一个过程调用,它将更新客户端的数据库。看起来像这样:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `update_database`()
begin

set @current_version := (select version from testrmaomo.dbase);

-- Only update if v4
if @current_version = '4' then

    ALTER TABLE `testrmaomo`.`notification`
    ADD COLUMN `senderID` VARCHAR(100) NULL COMMENT '' AFTER `ClientSMS`,
    ADD COLUMN `ClickatellUser` VARCHAR(100) NULL COMMENT '' AFTER `senderID`,
    ADD COLUMN `ClickatellPass` VARCHAR(100) NULL COMMENT '' AFTER `ClickatellUser`,
    ADD COLUMN `ClickatellApiID` VARCHAR(100) NULL COMMENT '' AFTER `ClickatellPass`;

    UPDATE testrmaomo.dbase SET Version = '5';

end if;

-- Only update if v5
if @current_version = '5' then

    CREATE TABLE `testrmaomo`.`client` (
    `ID` INT NOT NULL AUTO_INCREMENT COMMENT '',
    `Color` VARCHAR(45) NULL COMMENT '',
    `Client` VARCHAR(100) NULL COMMENT '',
    `Address` VARCHAR(400) NULL COMMENT '',
    `Telephone` VARCHAR(45) NULL COMMENT '',
    `Mobile` VARCHAR(45) NULL COMMENT '',
    `Email` VARCHAR(45) NULL COMMENT '',
    PRIMARY KEY (`ID`)  COMMENT '');

    UPDATE testrmaomo.dbase SET Version = '6';

end if;

end$$
DELIMITER ;


我的逻辑是,如果用户的数据库为v4,则它应同时运行两个if语句,因为第一个if语句将更新为v5,这应满足第二个if语句的要求。如果客户端已经在v5上,它将跳过第一个if语句,然后直接转到第二个。

由于某种原因,当我调用该过程时,它将仅运行第一个if语句,并且仅当第二次调用该过程时,它将运行第二个if。

有没有一种方法可以让我在一次通话中运行它?

最佳答案

您的@current_version不会更新,当然是4。

if @current_version = '4' then
...
    UPDATE testrmaomo.dbase SET Version = '5';

--just update your variable
    set @current_version = 5;
end if;

09-26 12:02