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

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、一个啰里啰唆的存储过程,但能正确的完成题目的要求,同时正确处理异常。


相关文章:
数据库判断题答案
应用程序无关,数据存储结构的改 变不影响应用程序的...( √ ) 43.SELECT 语句中的 ORDER BY 子句中,...√ 70 使用用户定义函数的方法与使用 SQL Server...
数据库 练习题(答案)
把嵌入的 SQL 语句处理成函数调用形式 C.对源程序...技术中,使用“ORDER BY”子句的 SELECT 语句查询的...语句可产生或处理一组记录,而 DB 主语言语句一般...
2014-1-数据库复习题-答案
40.在 SELECT 语句中使用 AVG(属性名)时,属性名( 41.在 SQL 中,对嵌套...D.在函数依赖范畴内,已消除了插入和 B.已消除了插入、删除异常和数据冗 A=A...
数据库原理及应用-期末考试试题
P+Q 20. 在 SQL 语言的 Select 语句中实现选择...冗 余度大、插入异常、_ 修改异常___和删除异常...第三范式是在第二范式的基础上消除了( 传递函数...
SQL题库(有答案)
使用关键字(2__A_)可以把重复行屏蔽,将多个查询结果返回一个结 果集合的运算符是(3_B__) ,如果在 SELECT 语句中使用集合函数时,一定在后面 使用(4_A__...
长沙理工大学数据库复习题答案
不能读不能写 25 在SQL语言的SELECT语句中,能实现...在关系模式 R 中,Y 函数依赖于 X 的语义是: (...数据冗余度大、修改异常、插入异常和_删除异常___。...
数据库习题答案 -3
在关系模型 R 中,函数依赖 X→Y 的语义是( B ...分解保持了函 数依赖,则它可以减轻或解决各种异常...2.SQL 查询语句中,在 SELECT 子句中允许出现列名和...
数据库复习题
A.一定要避免插入异常 C.一定要避免数据冗余 B....的联系 16.聚合函数不可以在下列哪个语句中( C ...在 SELECT 语句中,需要对分组情况应满足的条件进行...
Oracle数据库-作业2-答案
PL/SQL 中,如果 SELECT 语句没有返回任何记录,则会引发 NO_DATA_FOUND 异常...对于 BLOB 列,应该 使用 EMPTY_BLOB()函数进行初始化;可以在 INSERT 语句中...
数据库原理试卷带答案
聚合函数 D.选择 三、填空题(本题共 10 个小题...8.SQL 语言中用 ROLLBACK 语句实现事务的回滚。 9...有两处以上错误不分) ①SELECT COUNT(SNO) ②...
更多相关标签:
select语句 | sql select语句 | vb select case语句 | select case语句 | select语句大全 | mysql select语句 | select查询语句 | 数据库select语句 |