我正在用MySQL编写存储过程,以便在数据库中创建新的城市名称(如果尚不存在)。
这是我的存储过程的脚本:
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
,则对于inCityName
是否存在的所有inStateID
值,如果IF (cityCode IS NULL) THEN
相同,它将评估为FALSE。
如果我写条件inCityName
,则对SELECT Max(CityID) FROM cities;
的所有值求值为TRUE。同样,如果条件评估为TRUE,则过程返回的值为 0 ,并且不会为不存在的城市创建新记录。
如果我在过程外执行查询{{1}},则它将为数据库中已经存在的城市名称返回CityID的绝对值。
请帮助。
答案 0 :(得分:0)
尝试:
...
-- DECLARE cityCode VARCHAR(3) DEFAULT 0;
DECLARE cityCode VARCHAR(3); /* DEFAULT NULL */
...
-- SELECT @outCityID;
SELECT outCityID;
...
请参见dbfiddle。