Oracle函数返回Null?
这开始让我发疯了,我找不到这不起作用的原因 这些表上有触发器,因此cityID和postcodeID会自动填充。此函数的目的是查找具有相同名称的城市并返回其ID,否则将其添加到表中并返回新IDOracle函数返回Null?,oracle,Oracle,这开始让我发疯了,我找不到这不起作用的原因 这些表上有触发器,因此cityID和postcodeID会自动填充。此函数的目的是查找具有相同名称的城市并返回其ID,否则将其添加到表中并返回新ID CREATE OR REPLACE FUNCTION resolveCity(cityNameIn IN VARCHAR2) RETURN NUMBER AS cityIDOut NUMBER; BEGIN SELECT cityID INTO cityIDOut FROM
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;
/
如果PL/SQL中的选择失败,则会引发“未找到数据”异常。在本例中,函数中没有处理程序,因此它被提升到外部处理程序-显然没有,因此它会掉在地板上并丢失 我建议您将函数改写为:
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;
祝您好运。如果PL/SQL中的选择失败,将引发“找不到数据”异常。在本例中,函数中没有处理程序,因此它被提升到外部处理程序-显然没有,因此它会掉在地板上并丢失 我建议您将函数改写为:
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;
祝您好运。触发器是在插入之前还是在插入之后?在插入之前,它从Sequences填充主键是在插入之前还是在插入之后?在插入之前,它从Sequences填充主键谢谢您的回答,不幸的是,这返回了我:ORA-14551:无法在查询中执行DML操作ORA-06512:在“S.RESOLVECITY”,第13行ORA-01403:找不到数据您如何调用此函数?是否可以使用合并并返回新id?插入tblCustomerAddresses(userID、defaultAddress、addressLine1、addressLine2、addressLine3、cityID、postcodeID、countryCode)值(userIDout、1、sAddressLine1、sAddressLine2、sAddressLine3、RESOLVECITY(sAddressCity),resolvePostcode(sAddressPostcode),sAddressCountry);我将尝试使用合并,只需要查找-感谢您的建议!感谢您的回答,不幸的是,这返回我:ORA-14551:无法在查询中执行DML操作ORA-06512:在“S.RESOLVECITY”“,第13行ORA-01403:找不到数据您如何调用此函数?是否可以使用合并并返回新id?插入tblCustomerAddresses(userID、defaultAddress、addressLine1、addressLine2、addressLine3、cityID、postcodeID、countryCode)值(UserIout、1、sAddressLine1、sAddressLine2、sAddressLine3、resolveCity(sAddressCity),resolvePostcode(sAddressPostcode),sAddressCountry);我将尝试使用合并,只需查找它-感谢您的建议!