我有一个程序调用,它将更新客户端的数据库。它看起来像这样:
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。
有没有办法可以让它在一次通话中运行?
答案 0 :(得分:1)
你的@current_version没有更新,当然是4.
if @current_version = '4' then
...
UPDATE testrmaomo.dbase SET Version = '5';
--just update your variable
set @current_version = 5;
end if;
答案 1 :(得分:0)
.images{
background:rgba(14, 11, 10, 0.8);
display:block;
flex:10;
}
.images img{
width:100%;
}
你应该在第一个语句中将当前的_version变量更改为5