当前位置:首页 >> 计算机软件及应用 >>

SELECT语句中使用函数对异常产生的影响


SELECT 语句中使用函数对异常产生的影响 《Oracle 11g 数据库基础教程》 一书第 159 页例 10-1,考虑了 NO_DATA_FOUND 异常 ,但 不起 作用。 该文档进行 了原因分析,并处理。 对熟悉 NO_DATA_FOUND 和 TOO_MANY_ROWS 异常 和存储过程控制结构等 PL/SQL 程序开发均有帮助。 学习 《Oracle 11g 数据库基础教程》 , 其第 159 页例 10-1 要求: 创建名为 “PROC_SHOW_EMP” 的存储过程,以部门编号为参数,查询并输出该部门的平均工资,以及该部门中比该部门平 均工资高的员工信息。 程序如下: create or replace procedureproc_show_emp ( p_deptnoemployees.department_id%type ) as v_salemployees.salary%TYPE; begin SELECT salary INTO v_sal FROM employees WHERE department_id=p_deptno; SELECT avg(salary) INTO v_sal FROM employees WHERE department_id=p_deptno; dbms_output.put_line(p_deptno||' '||'average salary is:'||v_sal); FOR v_emp IN ( SELECT * FROM employees WHERE department_id= p_deptno AND salary>v_sal) LOOP dbms_output.put_line(v_emp.employee_id||''||v_emp.first_name||''||v_emp.last_name); END LOOP; EXCEPTION WHEN no_data_found THEN dbms_output.put_line('The department doesn''t exists!'); endproc_show_emp; 1、 在 SQL Plus 环境中运行后即编译。 2、 用存在的 10 号部门调用:execute proc_show_emp(10),结果正常。 3、 用不存在的 1000 号部门调用:execute proc_show_emp(1000),没有查询到数据,但也没 有产生 NO_DATA_FOUND 异常。即程序没有按预期的执行。分析原因,是因为 SELECT 语句中使用了 avg 函数。 4、 修改存储过程,加入: SELECT salary INTO v_sal FROM employees WHERE department_id=p_deptno; 结果正常。 但再用存在的 100 号部门调用: execute proc_show_emp(100), 又出现新问题, 即出现实际返回的行数超出请求的行数。 5、 修改存储过程,在异常处理部分加入: WHEN too_many_rows THEN dbms_output.put_line('The department is too many!'); 结果 3 种情况均能正常处理。部门 10 结果正常;部门 100 结果 too much;部门 1000 结果 doesn’t exist。 6、 修改存储过程: 将 dbms_output.put_line('The department is too many!');一行改为多行:

SELECT avg(salary) INTO v_sal FROM employees WHERE department_id=p_deptno; dbms_output.put_line(p_deptno||' '||'average salary is: '||v_sal); FOR v_emp IN ( SELECT * FROM employees WHERE department_id= p_deptno AND salary>v_sal) LOOP dbms_output.put_line(v_emp.employee_id||' '||v_emp.first_name||' '||v_emp.last_name); END LOOP; 7、一个啰里啰唆的存储过程,但能正确的完成题目的要求,同时正确处理异常。


相关文章:
2015年Oracle考试题
HAVING 子句用于已分组结果的条件查询 8、函数头部中...7、自定义异常必须使用(RAISE)语句显示触发。 8、 ...以及对 SCOTT 模式下的 EMP 表进行查询(SELECT)...
vfp中select语句用法
子句中加入了 FoxPro 函数,则意味着该语句不具备可...* 只能出现Select 子句中,通配 符前可以用别名...但 有时候如果这先后顺序不影响中间结果的话,那最终...
但一个调用聚合函数的SELECTINTO语句从来不会抛出异常N...
但一个调用聚合函数的 SELECT INTO 语句从来不会抛出异常 NO_DATA_FOUND,因为聚合函 数总会返回一个值或空。在这种情况下,%NOTFOUND 就会产生 FALSE,如下例: ...
oracle模拟题目
(SAL) 2)当 Select Into 语句的返回多于一行时,...抛出异常 25)在 Oracle 中创建用户时,若未提及 ...下列(D)程序段正确地调用该数据包的函数。 (选择...
...语句中,允许出现聚集函数的是 (23) 。 A.SELECT子句...
在SQL的查询语句中,允许出现聚集函数的是 (23) 。 A.SELECT子句B.WHERE子句C.HAVING短语D.SELECT子句和HAVING短语_答案解析_2016年_一模/二模/三模/联考_图文_...
数据库复习题
A.一定要避免插入异常 C.一定要避免数据冗余 B....错误操作 42.在 SELECT 语句中,使用*表示( B )...16. 对数据进行统计时,求最大值的函数是__MAX()...
Oracle11g第09讲存储过程及自定义函数(异常)
数据类 select XXX(sal) from emp; 函数调用限制 ...SQL 语句中调用的函数不能包含 INSERT,UPDATE 和 ...一个异常错误相关的错误出现时,就会隐含触发该异常...
东软oracle期中2.
如果只想包括收入超过 15000 的雇员, 应在 SELECT 语句中使用以下哪一个子句?...GROUPING 函数可用于: 标记为待复查 (1) 分数 生成小计和交叉表值 标识由 ...
orcale考试填空选择题
SELECT 语句中选择满足条件的记录使用 WHERE 关键...的聚合函数是 SUM 17.编写查询语句时,使用%通配符...用户会话被异常中断等情况,这些异 常属于进程故障 ...
用SELECT语句中,统计女生的人数,应使用的函数是___。 A...
用SELECT语句中,统计女生的人数,应使用的函数是___。 A.AVGB.COUNTC.SUMD.MAX正确答案及相关解析 正确答案 B 解析 暂无解析 最新上传...
更多相关标签: