这开始把我逼疯了,我找不到为什么这个不起作用了!
表上有触发器,以便自动填充cityID和postcodeID。此函数的目的是查找同名的城市并返回其ID,否则将其添加到表中并返回新的ID。
CREATE OR REPLACE FUNCTION resolveCity(cityNameIn IN VARCHAR2)
RETURN NUMBER AS
cityIDOut NUMBER;
BEGIN
SELECT cityID
INTO cityIDOut
FROM tblCities
WHERE cityName = cityNameIn;
IF cityIDOut IS NULL THEN
-- Add this city to the list
INSERT INTO tblCities (cityName)
VALUES (cityNameIn)
RETURNING cityID INTO cityIDOut;
END IF;
RETURN(cityIDOut);
END;
/发布于 2017-05-24 19:15:47
如果选择在PL/SQL中失败,将引发NO_DATA_FOUND异常。在本例中,函数中没有处理程序,因此它被提升到外部处理程序--而且显然没有处理程序,因此它会掉在地板上并丢失。
我建议你将你的职能改写为:
CREATE OR REPLACE FUNCTION resolveCity(cityNameIn IN VARCHAR2)
RETURN NUMBER AS
cityIDOut NUMBER;
BEGIN
BEGIN
SELECT cityID
INTO cityIDOut
FROM tblCities
WHERE cityName = cityNameIn;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Add this city to the list
INSERT INTO tblCities (cityName)
VALUES (cityNameIn)
RETURNING cityID INTO cityIDOut;
END;
RETURN(cityIDOut);
END;祝你好运。
https://stackoverflow.com/questions/44166477
复制相似问题