`
chenhua_1984
  • 浏览: 1252314 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

plsql的异常处理部分学习整理

阅读更多

ORACLE的PLSQL编程,异常处理主要分为3大块

 

AORACLE系统预定义异常 ,比如NO_DATA_FOUND;

 

B非预定义异常 ,用PRAGMA定义

 

C自定义异常

 

下面是主要的测试脚本

--除数为零的异常处理(预定义异常)
set serveroutput on;

declare
  v_dividend number:=50;
  v_divisor number:=0;
  v_quotient number;
 
 begin
 		v_quotient:=v_dividend/v_divisor;
 		exception 
 			when   ZERO_DIVIDE THEN
 			dbms_output.put_line('除数为零');
 			end;
 /
 
--no_data_foud异常(预定义异常)
select * from students;

declare
	v_id students.student_id%type;
	v_sname students.name%type;
begin
  v_id:=&student_id;
  select name into v_sname from students where student_id=v_id;
  dbms_output.put_line('学生姓名'||v_sname);
  exception 
  	when no_data_found then
  	dbms_output.put_line('输入的学号不存在');
end;

--too_many_rows 异常(预定义异常)
declare
	v_SPECIALTY students.SPECIALTY%type;
	v_sname students.name%type;
begin
  v_SPECIALTY:='&specialty';
  select name into v_sname from students  where SPECIALTY=v_SPECIALTY;
  dbms_output.put_line('学生姓名'||v_sname);
  exception 
  	when too_many_rows then
  	dbms_output.put_line('返回的学生记录多于一行');
end;

--考虑两种系统预定义异常 too_many_rows 和no_data_found异常(预定义异常)
declare
	v_SPECIALTY students.SPECIALTY%type;
	v_sname students.name%type;
begin
  v_SPECIALTY:='&specialty'; --这里的加引号和上面的不加引号有什么不一样?
  select name into v_sname from students  where SPECIALTY=v_SPECIALTY;
  dbms_output.put_line('学生姓名'||v_sname);
  exception 
  	when too_many_rows then
  	dbms_output.put_line('返回的学生记录多于一行');
  	when no_data_found then
  	dbms_output.put_line('没有记录');
end;

--非预定义异常 e_deptid EXCEPTION;(删除有主外键约束的表的异常处理)
--	pragma EXCEPTION_INIT(e_deptid ,-2292);
select * from departments;
set serveroutput on;
declare
	e_deptid EXCEPTION;
	pragma EXCEPTION_INIT(e_deptid ,-2292);
begin
	delete from departments where department_id=101;
	exception
	when e_deptid then
	dbms_output.put_line('在教师表中存在子记录'); --参照完整性异常,看似不会产生异常,但是假如于其他表有主外键关联则会出异常
end;

--插入有主外键约束的表的处理
select * from teachers;
set serveroutput on;
declare
	e_deptid EXCEPTION;
	pragma EXCEPTION_INIT(e_deptid ,-2292);
begin
	insert into teachers values (11101,'王彤','教授','01-9月-1990',1000,3000,999);
	exception
	when e_deptid then
	dbms_output.put_line('插入记录的部门号在父表中不存在'); --参照完整性异常,看似不会产生异常,但是假如于其他表有主外键关联则会出异常
end;


---插入的记录已经存在异常
select * from students;
set serveroutput on;
declare
	e_studentid EXCEPTION;
	pragma EXCEPTION_INIT(e_studentid ,-0001);
begin
	insert into students values (10205,null,'王三','男','26-12月-1989','自动化');
	exception
	when e_studentid then
	dbms_output.put_line('插入记录已经存在---'||SQLCODE||'错误描述---'||SQLERRM); --参照完整性异常,看似不会产生异常,但是假如于其他表有主外键关联则会出异常
end;

--自定义异常
declare
		e_wage EXCEPTION;
		v_wage teachers.wage%type;
	begin
			v_wage:=&wage;
			insert into teachers values (10111,'王彤','教授','01-9月-1990',1000,v_wage,101);
			if v_wage <0 then 
			 raise e_wage;
			end if;
			exception 
				when e_wage then
				dbms_output.put_line('教师工资不能为负');
				rollback;
				when others then
					dbms_output.put_line('未知异常');
	end;
/



 
分享到:
评论

相关推荐

    plsql用户完全手册(整理版)

    一个块由声明部分(声明变量、常量和子程序)、执行部分(执行SQL语句和流程控制)和异常处理部分组成。声明部分只在块内部有效,且不可在声明部分内嵌套子块,但可以在声明部分定义本地子程序。 3. 变量与常量 - ...

    plsql用户完全手册(整理版).rar

    总的来说,“PLSQL用户完全手册(整理版)”可能包含了上述所有内容,以及更多的细节和示例,是学习和精通PL/SQL的宝贵资源。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅,提升自己的数据库编程能力。

    plsql学习笔记整理.docx

    3. 异常处理部分(EXCEPTION):错误处理。 PL/SQL 中的特殊符号 1. `||`:字符串连接符,相当于 Java 中的 `+`。 复合类型 1. 记录类型(Record Type):是一种把逻辑相关的数据作为一个单元存储起来的类型,...

    PLSQL学习笔记

    PLSQL代码由三部分组成:声明部分(DECLARATION)、执行部分(EXECUTION)和异常处理部分(EXCEPTION HANDLING)。声明部分用于定义变量和游标;执行部分包含业务逻辑,如SQL语句和流程控制结构;异常处理部分则...

    整理:oracle pl/sql 入门+ 数组使用+游标+动态SQL

    - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、常量、游标、过程、函数等。 - 数据类型:了解PL/SQL中的内置数据类型,如NUMBER、VARCHAR2、DATE等,并学习如何声明变量。 -...

    Oracle笔记整理

    - 异常处理:通过EXCEPTION部分捕获并处理运行时错误。 2. Oracle数据库启动命令: "oracle启动命令.txt"可能包含了关于启动、关闭和管理Oracle数据库实例的信息: - STARTUP:启动数据库实例,连接到控制文件并...

    2018尚硅谷Java培训视频链接_Java基础阶段

    - 异常处理:学习异常的概念、异常的捕获和抛出等。 - 集合框架:介绍Java集合框架的基本概念,包括List、Set、Map等接口及其实现类。 #### 尚硅谷Java基础实战——Bank项目 - **Bank项目概述**: - 项目背景:...

    bep_budget_public_body

    PLSQL美化通常指的是将原始的、可能未经格式化的PL/SQL代码进行整理,使其更符合编码规范,增加注释,提高代码的可读性和可维护性。这对于团队协作尤其重要,因为整洁的代码能帮助开发者更快地理解和修改代码,减少...

    Oracle学习笔记.txt

    - 异常处理:```plsql declare v_num number := 0; begin v_num := 2 / v_num; dbms_output.put_line(v_num); exception when others then dbms_output.put_line('Error'); end; ``` 以上是根据提供的...

Global site tag (gtag.js) - Google Analytics