Oracle SQL自定义函数编译成功但查询语句被忽略问题求助
Oracle行程ID查询函数运行失效修复方案
现有代码存在的问题
- 列数不匹配:SELECT语句共返回
trips_id、date_of_trip、source_town、destination_town4个字段,但INTO仅对应1个变量,字段与变量数量不匹配会直接触发运行异常。 - 入参不符合业务要求:业务需要传入客户、车主、出发地、目的地、日期5个过滤参数,现有函数仅设计1个数值类型入参
findID,完全不匹配业务逻辑。 - 字段名拼写不一致:SELECT子句查询的主键为
trips_id,WHERE过滤条件写为trip_id,字段名不统一会导致查询无匹配结果。 - 缺少异常处理:未捕获无匹配数据、返回多条数据的场景,运行时会直接抛出
NO_DATA_FOUND、TOO_MANY_ROWS异常。
修复后符合业务需求的代码
CREATE OR REPLACE FUNCTION findingID ( p_customer_id IN NUMBER, p_owner_id IN NUMBER, p_source_town IN VARCHAR2, p_destination_town IN VARCHAR2, p_trip_date IN DATE ) RETURN NUMBER IS return_id trips.trips_id%TYPE; BEGIN SELECT trips_id INTO return_id FROM trips WHERE customer_id = p_customer_id AND owner_id = p_owner_id AND source_town = p_source_town AND destination_town = p_destination_town AND date_of_trip = p_trip_date; RETURN return_id; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL; WHEN TOO_MANY_ROWS THEN RETURN NULL; END; /
注:代码中customer_id、owner_id为 trips 表关联的客户、车主字段名,可根据实际表结构调整。
内容的提问来源于stack exchange,提问作者SGA-AllStar
相关产品推荐
相关产品推荐

