我有一个过程调用,它将更新客户端的数据库。看起来像这样:
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;