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

SELECT语句中使用函数对异常产生的影响《Oracle11g数据库基础教程》一书第159页例10-1,考虑了NO_DATA_FOUND异常,但不起作用。该文档进行了原因分析,并处理。对熟悉NO_DATA_FOUND和TOO_MANY_ROWS异常和存储过程控制结构等PL/SQL程序开发均有帮助。学习《Oracle11g数据库基础教程》,其第159页例10-1要求:创建名为“PROC_SHOW_EMP”的存储过程,以部门编号为参数,查询并输出该部门的平均工资,以及该部门中比该部门平均工资高的员工信息。程序如下:createorreplaceprocedureproc_show_emp(p_deptnoemployees.department_id%type)asv_salemployees.salary%TYPE;beginSELECTsalaryINTOv_salFROMemployeesWHEREdepartment_id=p_deptno;SELECTavg(salary)INTOv_salFROMemployeesWHEREdepartment_id=p_deptno;dbms_output.put_line(p_deptno||''||'averagesalaryis:'||v_sal);FORv_empIN(SELECT*FROMemployeesWHEREdepartment_id=p_deptnoANDsalary>v_sal)LOOPdbms_output.put_line(v_emp.employee_id||''||v_emp.first_name||''||v_emp.last_name);ENDLOOP;EXCEPTIONWHENno_data_foundTHENdbms_output.put_line('Thedepartmentdoesn''texists!');endproc_show_emp;1、在SQLPlus环境中运行后即编译。2、用存在的10号部门调用:executeproc_show_emp(10),结果正常。3、用不存在的1000号部门调用:executeproc_show_emp(1000),没有查询到数据,但也没有产生NO_DATA_FOUND异常。即程序没有按预期的执行。分析原因,是因为SELECT语句中使用了avg函数。4、修改存储过程,加入:SELECTsalaryINTOv_salFROMemployeesWHEREdepartment_id=p_deptno;结果正常。但再用存在的100号部门调用:executeproc_show_emp(100),又出现新问题,即出现实际返回的行数超出请求的行数。5、修改存储过程,在异常处理部分加入:WHENtoo_many_rowsTHENdbms_output.put_line('Thedepartmentistoomany!');结果3种情况均能正常处理。部门10结果正常;部门100结果toomuch;部门1000结果doesn’texist。6、修改存储过程:将dbms_output.put_line('Thedepartmentistoomany!');一行改为多行:SELECTavg(salary)INTOv_salFROMemployeesWHEREdepartment_id=p_deptno;dbms_output.put_line(p_deptno||''||'averagesalaryis:'||v_sal);FORv_empIN(SELECT*FROMemployeesWHEREdepartment_id=p_deptnoANDsalary>v_sal)LOOPdbms_output.put_line(v_emp.employee_id||''||v_emp.first_name||''||v_emp.last_name);ENDLOOP;7、一个啰里啰唆的存储过程,但能正确的完成题目的要求,同时正确处理异常。

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?