这开始让我发疯,我找不到这个为什么不起作用的原因!
表格上有触发器,因此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;
/
答案 0 :(得分:2)
如果PL / SQL中的SELECT失败,则会引发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;
祝你好运。