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. 处理No CPU/ABI system image for target的方法

    处理No CPU/ABI system image for target的方法 最近菩提搭建完成Android开发环境后,在创建安卓模拟器的时候遇到了问题.这个问题就是图片中显示的no CPU/ABI ...

  2. 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)

    传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...

  3. 2018.09.14 codechef Milestone(随机化算法)

    传送门 由于存在不超过7条直线可以覆盖超过所有的点. 所以如果我们随机选点的话(每次随机两个) 那么得到的解恰好为最优解的概率是149" role="presentation&qu ...

  4. Linux教程:基础+中级+运维高级

    视频内容40G:Linux基础视频.Linux中级视频.Linux运维高级视频+赠送 职业素质视频 +查用服务器安卓文档 目录 Linux基础教程81节 常用命令.文件管理命令详解.bash脚本编程. ...

  5. web大文件上传(web应用---SSH框架)

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  6. MOD13A1: MODIS/Terra Vegetation Indices 16-Day L3 Global 500 m SIN Grid V006

    https://lpdaac.usgs.gov/node/838 Description The MOD13A1 Version 6 product provides a Vegetation Ind ...

  7. (字典树)How many--hdu--2609

    http://acm.hdu.edu.cn/showproblem.php?pid=2609 How many Time Limit: 2000/1000 MS (Java/Others)    Me ...

  8. (并查集 添加关系)How Many Answers Are Wrong --Hdu --3038

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=3038 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  9. (匹配)Oil Skimming -- hdu --4185

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4185 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  10. 基于MATLAB的中值滤波算法实现

    在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广 ...