Oracle PL/SQL异常处理
来源:互联网 发布:淘宝联盟做什么的 编辑:程序博客网 时间:2024/05/21 08:47
case语句语法格式如下:CASE <变量> WHEN <表达式1> THEN 值1 WHEN <表达式2> THEN 值2 …… WHEN <表达式n> THEN 值n ELSE 值n + 1 END;
1、使用case语句写一个pl/sql块,要求输入员工编号,根据员工的职位进行工资提升,提升要求如下:
如果职位是CLERK,工资增长5%,
如果职位是SALESMAN,工资增长8%,
如果职位是MANAGER,工资增长10%,
如果职位是ANALYST,工资增长20%,
如果职位是PRESIDENT,工资不增长。
declarev_job emp.job%type;v_empno emp.empno%type;v_sal emp.sal%type;beginv_empno := &员工编号;select job,sal into v_job,v_sal from emp where empno = v_empno;case v_job when 'CLERK' then v_sal := v_sal * 1.05; when 'SALESMAN' then v_sal := v_sal * 1.08; when 'MANAGER' then v_sal := v_sal * 1.1; when 'ANALYST' then v_sal := v_sal * 1.2; when 'PRESIDENT' then v_sal := v_sal; else dbms_output.put_line('others'||v_sal);end case;update emp set sal=v_sal where empno = v_empno;dbms_output.put_line('sal='||v_sal);end;
异常实验:
2、处理异常—-找不到数据
我们要写一个pl/sql块,功能就是由键盘输入员工编号,输出员工姓名。
如果员工编号输入有误,那么就会找不到数据。如下图所示,输入7788,输出员工姓名,输入9999,没有该员工,输出查无此人。
思路:先写一个没有exception模块的plsql块,输入一个不存在的员工编号,看看会有什么错误提示。然后把这个错误提示对应的错误代码加入到exception模块中。
declarev_emp emp%rowtype; v_empno emp.empno%type;begin v_empno := &员工编号;select * into v_emp from emp where empno = v_empno;dbms_output.put_line(v_emp.empno||' '||v_emp.ename);exception when no_data_found then dbms_output.put_line('不存在此项数据') ;end;/
3、定义一个pl/sql块为dept表增加部门信息
比如:键盘输入一个部门信息,要么异常要么正常插入到dept表。
60,defence,shanghai
如果插入的部门在dept里有,要引发异常,异常部分输出“该部门已有”
如果插入的部门在dept里没有,正常插入这一行信息,并显示“部门信息已经插入”
方案一:
利用系统提供的主键约束异常,仅用于存在唯一性约束的表
试图破坏一个唯一性约束异常 dup_val_on_index方案二:
1.用户自定义异常,判断该表中是否已存在该项数据
2.Insert
优点:可用于任意列,不需要满足唯一性约束
//方案一declareexc_insert exception;v_dept dept%rowtype;v_deptcount number(4);beginv_dept.deptno := upper('&部门编号');v_dept.dname := upper('&部门名称');v_dept.loc := upper('&部门职位');select count(*) into v_deptcount from emp;insert into dept values(v_dept.deptno,v_dept.dname,v_dept.loc);dbms_output.put_line('部门信息已经插入');exception when dup_val_on_index then dbms_output.put_line('该项已存在,不可插入');end;/
//方案二declareexc_insert exception;v_dept dept%rowtype;v_deptcount number(4);beginv_dept.deptno := &部门编号;v_dept.dname := &部门名称;v_dept.loc := &部门职位;select count(*) into v_deptcount from emp;select count(*) v_deptcount into from dept where deptno = v_dept.deptno;if v_deptcount = 0 then reise exc_insert;end if;exception when exc_insert then dbms_output.put_line('erros');end;
实验注意:
1.关于case语句的使用
2.关于用户输入适配upper('&部门编号');
3.关于用户自定义异常的使用
0 0
- Oracle:pl/sql 异常处理
- Oracle:pl/sql 异常处理
- Oracle PL/SQL异常处理
- Oracle PL/SQL异常处理
- Oracle:pl/sql 异常处理[转]
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle笔记 七、PL/SQL 异常处理
- ORACLE PL/SQL编程--异常错误处理
- ORACLE PL/SQL 异常错误处理
- Oracle笔记 七、PL/SQL 异常处理
- Oracle数据库之PL/SQL异常处理
- Oracle pl/sql编程 17---异常处理
- PL/SQL 异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- PL/SQL异常处理
- Linux集群环境搭建
- StoryBoard中自定义view时初始化的问题
- 解决C:\Program Files\Java\jdk1.7.0_71\bin\java.exe'' finished with non-zero exit value 2
- 微信公众号与HTML 5混合模式揭秘4——jssdk调用微信扫一扫
- SimpleDateFormat与Calendar的24小时制与12小时制
- Oracle PL/SQL异常处理
- 官方SDK微信分享
- 超高颜值难以抵挡 乐泡淳移动电源体验
- sqlldr理论深入学习
- sqlite修改路径
- Linux使用GCC编译matlab的m文件使其可执行
- log4j使用教程详解(怎么使用log4j2)
- git中用shell命令停止nodejs服务
- OmniGraffle 制作表格 调整对象