【发布时间】:2015-05-21 16:09:07
【问题描述】:
我在 Oracle 中运行代码,要求用户输入路线类型,然后程序根据用户输入的路线以及获取的行数获取最长和最短的路线。我需要在代码中添加任何异常,并且我正在尝试考虑在这种情况下我可以添加什么样的异常。我正在考虑添加一个异常,如果获取的行
我的代码是:
SET SERVEROUTPUT ON;
SET VERIFY OFF
DECLARE
v_type VARCHAR2 (20);
min_length NUMBER;
max_length NUMBER;
v_count NUMBER;
BEGIN
v_type := '&InsertTypeRoute';
IF v_type = 'Multi-Lane Divided' OR
v_type = 'Paved Divided' OR
v_type = 'Paved Undivided' THEN
SELECT MIN(LENGTH_KM), MAX(LENGTH_KM), COUNT(LENGTH_KM) INTO min_length, max_length, v_count
FROM TBLROUTE WHERE TYPE = v_type;
DBMS_OUTPUT.PUT_LINE('The minimum length is: ' || TO_CHAR(min_length));
DBMS_OUTPUT.PUT_LINE('The maximum length is: ' || TO_CHAR(max_length));
DBMS_OUTPUT.PUT_LINE ('Total number of '|| v_type ||' route is: ' || TO_CHAR(v_count));
ELSE
DBMS_OUTPUT.PUT_LINE ('Route type cannot be found');
END IF;
/*
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('Route type cannot be found'); */
END;
/
这些异常呢?它们在这种情况下是否合适?
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('Data not found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('This program encountered an error');
【问题讨论】:
-
我不确定我是否理解您提出的问题。如果
SELECT INTO返回除 1 行以外的任何内容,您是否问会引发什么异常?如果查询返回超过 1 行,您将收到too_many_rows异常;如果查询返回 0 行,您将收到no_data_found异常。这就是你要问的吗?还是你在问别的?没有IF的ELSE没有多大意义。 -
EXCEPTION WHEN OTHERS THEN NULL (write error to log table passing in known paramaters and values and procedure package encountering the error);inline 您可以处理已知错误,例如WHEN no_data_found THEN或WHEN too_many_rows THEN我会使用这种类型的逻辑来捕获所有错误并将它们记录下来,以便我们可以查看问题是否未解决,并且有日志来解决它们作为以后的增强功能 -
我正在尝试找到一个异常,如果路由类型的行数或更少,它将给我一个错误,因为每个路由类型应该有比 1 多得多的记录。
标签: oracle plsql exception-handling