我正在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的绝对值。
请帮帮我。
1条答案
按热度按时间6yt4nkrj1#
尝试:
见小提琴。