欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于no_data_found错误的有关问题

更新时间: 2014-01-05 02:14:05 责任编辑: Author_N1

 

关于NO_DATA_FOUND异常的问题
场景1:输入指定员工号码查询员工姓名
SET SERVEROUTPUT ON
DECLARE
  v_ename t_myemp.ename%TYPE;
  v_empno t_myemp.empno%TYPE;
BEGIN
  v_empno:=&deptno;
  SELECT ename INTO v_ename FROM t_myemp WHERE empno=v_empno;
  DBMS_OUTPUT.PUT_LINE(v_ename);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE(v_empno||'员工没有找到');
END;
/
输入正确员工号:7900  输出: JAMES
输入错误员工号:7901  输出: 7901员工没有找到

场景2:输入指定部门号码查询部门平均工资
SET SERVEROUTPUT ON
DECLARE
  v_avg_sal t_myemp.sal%TYPE;
  v_deptno t_myemp.deptno%TYPE;
BEGIN
  v_deptno:=&deptno;
  SELECT AVG(sal) INTO v_avg_sal FROM t_myemp WHERE deptno=v_deptno;
  DBMS_OUTPUT.PUT_LINE(v_deptno||'部门的平均工资是:'||v_avg_sal);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE(v_deptno||'部门没有找到');
END;
/
输入正确部门号:20  输出: 20部门的平均工资是:2175
输入错误员工号:21  输出: 21部门的平均工资是:

请问:为什么场景2没有报NO_DATA_FOUND错误???
--参考方法--
不知道是不是因为你empno和deptno的类型不同引起的
--参考方法--
单步跟下试试吧
--参考方法--
select ... into ..from table_name 
这个语句导致的,你要看下是不是没有查到数据
把你传入的参数带入去验证下
--参考方法--


AVG函数在数据不存在时返回NULL(有返回值,只是值为NULL),而普通的SELECT ..INTO 在数据不存在时根本不会返回数据。所以场景②不会报错。

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:05
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7303/
本文WWW.DOC100.NET DOC100.NET版权所有。