无法正确计算mysql存储过程中的条件

4jb9z9bj  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我正在mysql中编写一个存储过程,以便在db中创建一个新的城市名称(如果它还不存在的话)。
下面是我的存储过程的脚本:

CREATE PROCEDURE `SaveCity` (
  IN `inStateID` varchar(2), 
  IN `inCityName` varchar(30),
  OUT `outCityID` varchar(3)
)
BEGIN
  DECLARE cityCode VARCHAR(3) DEFAULT 0;
  DECLARE maxCityID VARCHAR (3);
  /* Test whether CityName already exists */
  SELECT CityID INTO cityCode FROM cities WHERE StateID = inStateID AND CityName = inCityName;

  IF cityCode IS NULL THEN
      /* Fetch Max CityID */
      SELECT Max(CityID) INTO maxCityID FROM cities; 
      /* Increment CityID counter */
      SET cityCode = maxCityID + 1;
      INSERT INTO cities VALUES (cityCode, inStateID, inCityName);
  END IF;
  SET outCityID = cityCode;
  SELECT @outCityID;
END

如果我写条件 IF cityCode IS NULL THEN ,它的所有值的计算结果都为false inCityName ,是否已存在,提供 inStateID 是一样的。
如果我写条件 IF (cityCode IS NULL) THEN ,对于的所有值,它的计算结果都为true inCityName . 同样,如果条件的计算结果为true,则过程返回的值为0,并且不会为不存在的城市创建新记录。
如果我执行查询 SELECT Max(CityID) FROM cities; 在过程之外,它将为数据库中已经存在的城市名称返回cityid的绝对值。
请帮帮我。

6yt4nkrj

6yt4nkrj1#

尝试:

...
  -- DECLARE cityCode VARCHAR(3) DEFAULT 0;
  DECLARE cityCode VARCHAR(3); /* DEFAULT NULL */
...
  -- SELECT @outCityID;
  SELECT outCityID;
...

见小提琴。

相关问题