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之Set接口(单列集合)

    Set接口概述 java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Coll ...

  2. CSP2019 游记

    \(\text{CSP 2019}\) 游记 \[\text{草}\] \[\text{By:Luckyblock}\] \[Day\ -1:\] \(19:00\) 送行饭, 被摁在墙角干了 因为偏 ...

  3. Java连载54-两种单例模式、接口详解

    一.单例模式分为两种: (1)饿汉式单例:在类加载阶段就创建了一个对象. (2)懒汉式单例:用对对象的时候才会创建对象.(连载53中例子就是懒汉式) 饿汉式举例: package com.bjpowe ...

  4. python——map()函数

    描述 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 语法 m ...

  5. Linux CentOS上安装 MySQL 8.0.16

    前言: 因为我需要在我新安装的Linux CentOS系统服务器中安装和配置MySQL服务器,然而对于我们这种Linux使用小白而言在Linux系统中下载,解压,配置MySQL等一系列的操作还是有些耗 ...

  6. Winform中使用DevExpress的CheckEdit控件实现多选条件搜索

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. 常用类-CSV---OLEDB

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. C# Serialization performance in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,Newtonsoft.Json.JsonConvert and System.Text.Json.JsonSerializer.Serialize

    In .net core 3.0 using System;using System.Collections.Generic;using System.Collections;using System ...

  9. SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在

    场景 在IDEA中新建SpringBoot项目,后启动项目时提示: Error:(3, 32) java: 程序包org.springframework.boot不存在 实现 将pom.xml中par ...

  10. android 对于asset和raw下文件的操作

    Android 中资源分为两种,一种是res下可编译的资源文件, 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,访问也很简单,只需要调用R.XXX.id即可;第二种就是放在assets ...