PL/SQL 异常和goto语句

异常

预定义异常

oracle常见预定义异常:

错误号 异常错误信息名称 说明
ORA-0001 DUP_VAL_ON_INDEX 试图破坏一个唯一性限制
ORA-0051 TIMEOUT_ON_RESOURCE(少用) 在等待资源时发生超时
ORA-0061 TRANSACTION_BACKED_OUT(少用) 由于发生死锁事务被撤消
ORA-1001 INVALID_CURSOR 试图使用一个未打开的游标
ORA-1012 NOT_LOGGED_ON(少用) 没有连接到ORACLE
ORA-1017 LOGIN_DENIED(少用) 无效的用户名/口令
ORA-1403 NO_DATA_FOUND SELECT INTO没有找到数据
ORA-1422 TOO_MANY_ROWS SELECT INTO 返回多行
ORA-1476 ZERO_DIVIDE 试图被零除
ORA-1722 INVALID_NUMBER 转换一个数字失败
OTHERS(总是写在最后) 其它的异常(总是放在异常处理块的最后)

Oracle内置有两个与异常有关的函数

  • SQLCODE 返回Oracle的错误代码
  • SQLERRM 返回Oracle的错误消息
--使用预定义异常
declare
v_empno employee.empno%type;
rec_emp employee%rowtype;
begin
v_empno := &请输入员工编号;
select * into rec_emp from employee;-- where empno=v_empno;
dbms_output.put_line('编号:'||rec_emp.empno||', 姓名:'||rec_emp.ename); --异常处理
exception
when NO_DATA_FOUND then --数据未找到
dbms_output.put_line('数据未找到,原因:'||SQLCODE||','||SQLERRM);
when TOO_MANY_ROWS THEN
dbms_output.put_line('数据过多,不能给变量赋值,原因:'||SQLCODE||','||SQLERRM);
when others then
dbms_output.put_line('未知异常,原因:'||SQLCODE||','||SQLERRM);
end;
/

自定义异常

  1. 声明异常: 变量名 exception;
  2. 抛出异常: raise 变量名;
  3. 处理异常:exception
--问题:如果某员工没有奖金时抛出“无奖金异常”
declare
v_empno employee.empno%type := &请输入编号;
rec_emp employee%rowtype;
ex_no_comm exception; --定义无奖金异常
begin
select * into rec_emp from employee where empno=v_empno;
if (rec_emp.comm is null or rec_emp.comm=0) then
raise ex_no_comm;--2. 抛出异常
end if;
--3. 异常处理
exception
when ex_no_comm then
dbms_output.put_line('无奖金异常');
end;
/

异常交给java处理(了解)

使用SQL中的函数RAISE_APPLICATION_ERROR(error_number, error_message)即可把异常交给java处理。

java中通过try捕获到SQLException,之后通过SQLException的getCode和getMessage方法来获得

goto语句

--若XXX员工的工资小于奖金的 3倍,则为该员工的工资增加30%。
declare
v_empno employee.empno%type;
v_sal employee.sal%type;
v_comm employee.comm%type;
begin
v_empno := &请输入员工编号;
select sal,comm into v_sal,v_comm from employee where empno=v_empno;
if v_sal<nvl(v_comm,0)*3 then
goto updating;
end if; --定义标号
<<updating>>
update employee set sal=sal+sal*0.3 where empno=v_empno;
commit;
<<quit>>
null; --空语句,什么都不做
end;
/

oracle学习笔记(十六) PL/SQL 异常和goto语句的更多相关文章

  1. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  2. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  3. Oracle 学习笔记 17 -- 异常处理(PL/SQL)

    程序异常是在操作期间正常,出现在节目的准备过程是不可避免的例外.但是,必须有一个相应的异常处理机 制,以保证程序的正常运行.PL/SQL程序运行过程中出现的错误.称为异常. 一个优秀的程序都应该可以正 ...

  4. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  5. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  6. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

  7. oracle学习(二)pl/sql基础

    pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...

  8. Oracle学习笔记十四 内置程序包

    扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...

  9. Oracle 学习笔记(六)

    Oracle 数据库常用的闪回sql 语句及其它操作语句: --Oracle 数据库dml sql -- 查看当前用户所拥有的表 select * from tab; --表空间,auto: 自动管理 ...

随机推荐

  1. Java题库——Chapter5 方法

    1)Suppose your method does not return any value, which of the following keywords can be used as a re ...

  2. (六十三)c#Winform自定义控件-箭头(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  3. Git - Git版本库相关操作

    创建Git版本库 如下命令实现在“E:\GitCode\01_TestGit”路径下,01_TestGit项目的Git版本库. $ cd E: #将当前目录转到E盘下 $ cd GitCode    ...

  4. 【SDUT】2019SDUTACM第一次选拔赛 F- X的追求道路

    Problem Description X在大家的帮助下终于找到了一个妹纸,于是开始了漫漫的追求之路,那么大家猜一猜X能不能追的上呢? X初始对妹纸有一个心动值,妹纸对X有一个好感值,在追求时发生的的 ...

  5. SSH框架之Struts2第二篇

    1.2 知识点 1.2.1 Struts2的Servlet的API的访问 1.2.1.1 方式一 : 通过ActionContext实现 页面: <h1>Servlet的API的访问方式一 ...

  6. Implement Custom Business Classes and Reference Properties实现自定义业务类和引用属性(EF)

    In this lesson, you will learn how to implement business classes from scratch. For this purpose, the ...

  7. PHP mysqli_stat MySQLi 函数

    定义和用法 mysqli_stat - 获取当前系统状态信息 版本支持 PHP4 PHP5 PHP7 不支持 支持 支持 语法 mysqli_stat ( mysqli $link ) mysqli_ ...

  8. JQuery javascript实现父子页面相互调用

    javascript实现父子页面相互调用 By:授客 QQ:1033553122 场景1 父页面调用子页面 如上图,在iframe子页面的<script>元素中,定义了taskStatus ...

  9. 使用Vue-cli3.0创建的项目,如何发布npm包

    使用Vue-cli3.0创建的项目,如何发布npm包 在使用vue进行项目开发时,如果我们想要发布一个包,有时候会有点迷糊,不知道应该怎么修改脚手架的默认设置.这里记录一下一些常见的操作. 创建ind ...

  10. Django后台应用管理名称修改

    目标修改位置: 相应需要修改代码位置 然后在APP目录下的这里添加此行  再重启Django 即可得到