1、例外分类:系统例外、自定义例外

(1)系统例外,参见相关API文档

(2)自定义例外

定义自己的例外:就像自定义变量一样,类型为exception

抛出例外:使用raise抛出自定义例外

set serveroutput on
declare
cursor cemp is select ename from emp where deptno=50; pename emp.ename%type; --self define exception
self_no_data_found exception;
begin
open cemp; fetch cemp into pename;
if cemp%notfound then
--throw self define exception
raise self_no_data_found;
end if;
exception
when self_no_data_found then
dbms_output.put_line('执行了自定义异常!');
if cemp%isopen then
dbms_output.put_line('close cursor!');
close cemp;
end if;
when others then
dbms_output.put_line('执行了others异常!');
if cemp%isopen then
close cemp;
end if;
end;
/

运行结果:

2、我们使用游标,然后尝试抓取游标中的一条记录,并判断是否有值,如果有值,将其赋值给临时变量。如果没有值,触发自定义异常。

create or replace function f_user_qr_groupmemberinfo

(i_phonenumber                   in emp.empno%type, --用户号码

 i_memberphonenumber             in emp.ename%type, --成员号码

 i_result                        out integer        --0:数据库操作异常; 1:查询操作正常 2:没有找到数据

 )

 return MYPACKAGE.empcursor as

  c_groupmemberinfo MYPACKAGE.empcursor; --结果游标

  str_sql_selectsql varchar2(32676) := 'select t.empno '

                                       || 'from emp t '

                                       || 'where t.empno=:i_phonenumber '

                                       ||
'and t.ename=:i_memberphonenumber';
pempno emp.empno%type;
--self define exception
self_no_data_found exception;
temp emp.empno%type;
begin --查询用户主叫号码组内部id open c_groupmemberinfo for str_sql_selectsql
using i_phonenumber, i_memberphonenumber; fetch c_groupmemberinfo into pempno;
if c_groupmemberinfo%notfound then
--throw self define exception
raise self_no_data_found;
end if; temp := pempno; i_result := 1; return c_groupmemberinfo; --异常 exception
when self_no_data_found then
open c_groupmemberinfo for
select 'X' from dual where 1 = 0; i_result := 2; return c_groupmemberinfo;
when others then open c_groupmemberinfo for
select 'X' from dual where 1 = 0; i_result := 0; return c_groupmemberinfo; end f_user_qr_groupmemberinfo;

结果:

自定义的游标:

Oracle PL/SQL学习之基础篇(2)--例外的更多相关文章

  1. Oracle PL/SQL学习之基础篇(1)

    1.PL/SQL,全称Procedure Language/SQL,过程化sql语言 PL/SQL的程序结构 declare --声明部分(包括变量.光标.例外声明) begin --语句序列(DML ...

  2. 浅析Oracle PL/SQL 学习--未完待续

    这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...

  3. Oracle PL/SQL学习之Hello World(0)

    1.PL/SQL是Oracle数据库的一大创举,让一些复杂繁琐的常规主流编程代码做的编码处理过程,只需要在PL/SQL中使用简短的几句代码就可以解决,并且准确高效.那么遵循惯例,我们学习PL/SQL编 ...

  4. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  5. Oracle PL/SQL编程之基础

    1.简介:pl/sql块由三个部分组成:定义部分.执行部分.例外处理部分,如下所示: declare: /*定义部分---定义常量.变量.游标.例外.复杂数据类型 begin /*执行部分---要执行 ...

  6. Oracle PL/SQL学习之你需要知道的快捷键

    1.格式化sql语句 Ctrl+A  然后  Ctrl+F7 2.窗口最大化最小化 首选项-->快捷键-->Maximize Toggle,然后修改成自己熟悉的快捷键设置.

  7. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  8. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

  9. 学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户

    通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123  AS SYSDBA 账户名:sys:密码:123:作 ...

随机推荐

  1. 2018.10.15 bzoj4445: [Scoi2015]小凸想跑步(半平面交)

    传送门 话说去年的省选计算几何难度跟前几年比起来根本不能做啊(虽然去年考的时候并没有学过计算几何) 这题就是推个式子然后上半平面交就做完了. 什么? 怎么推式子? 先把题目的概率转换成求出可行区域. ...

  2. 2018.09.01 独立集(树形dp)

    描述 给定一颗树(边权为1),选取一个节点子集,使得该集合中任意两个节点之间的距离都大于K.求这个集合节点最多是多少 输入 第一行是两个整数N,K 接下来是N-1行,每行2个整数x,y,表示x与y有一 ...

  3. WebService测试工具介绍及下载

    1 LoadRunner  LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问 题,LoadRunner能够对整个企业架构 ...

  4. java 解析txt/html文件

    package util.read; import java.io.BufferedReader;import java.io.FileReader; public class ReadFromFil ...

  5. IntellJ IDEA javax.servlet.ServletException 找不到javax.servlet.ServletException的类 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    误状态:错误显示 解决: (1)说明缺少包---->添加如下包配置 <dependency> <groupId>javax.servlet.jsp</groupId ...

  6. ansible-playbook 主机变量1

    hosts 配置后可以支持指定 端口,密码等其他变量 [root@10_1_162_39 host_vars]# ll total -rw-r--r-- root root May : hosts - ...

  7. 用python实现各种排序算法

    最简单的排序有三种:插入排序,选择排序和冒泡排序.它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了. 贴出源代码: 插入排序: def insertion_sort(sort_list) ...

  8. 11) 生成可执行jar文件 maven-shade-plugin

    搜索 site:maven.apache.org maven-assembly-plugin http://maven.apache.org/plugins/maven-assembly-plugin ...

  9. MFC框架仿真<二>

  10. Python + Robotframework + Appium 之APP自动化测试实践(一)

    前面的文章已经介绍了Robotframework+Appium的安装及小试牛刀(For Android) 下面来个简单的实践,话不多说,还以是计算器为例,直接上代码,详情如下: *** Setting ...