Oracle PL/SQL学习之基础篇(2)--例外
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)--例外的更多相关文章
- Oracle PL/SQL学习之基础篇(1)
1.PL/SQL,全称Procedure Language/SQL,过程化sql语言 PL/SQL的程序结构 declare --声明部分(包括变量.光标.例外声明) begin --语句序列(DML ...
- 浅析Oracle PL/SQL 学习--未完待续
这是一篇关于Oracle Pl/SQL数据库编程的课程学习分享... 首先说明几点: 学习这门课程之前,已经学过并且掌握一些基础的SQL语句.数据库结构分析.ER图设计等知识: 这里也只是较为大概地将 ...
- Oracle PL/SQL学习之Hello World(0)
1.PL/SQL是Oracle数据库的一大创举,让一些复杂繁琐的常规主流编程代码做的编码处理过程,只需要在PL/SQL中使用简短的几句代码就可以解决,并且准确高效.那么遵循惯例,我们学习PL/SQL编 ...
- [Oracle] PL/SQL学习笔记
-- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...
- Oracle PL/SQL编程之基础
1.简介:pl/sql块由三个部分组成:定义部分.执行部分.例外处理部分,如下所示: declare: /*定义部分---定义常量.变量.游标.例外.复杂数据类型 begin /*执行部分---要执行 ...
- Oracle PL/SQL学习之你需要知道的快捷键
1.格式化sql语句 Ctrl+A 然后 Ctrl+F7 2.窗口最大化最小化 首选项-->快捷键-->Maximize Toggle,然后修改成自己熟悉的快捷键设置.
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- 学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户
通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123 AS SYSDBA 账户名:sys:密码:123:作 ...
随机推荐
- gj8 元类编程
8.1 property动态属性 from datetime import date, datetime class User: def __init__(self, name, birthday): ...
- 日历时间选择控件---3(支持ie、火狐)
效果展示: 源代码: <script language=javascript ><!--/* 调用方法:不能用onfocus,要用onclick <input onclic ...
- Linux学习--2
字符串 字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似 单引号字符串的限制:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的:单引号字串中不能出现单引号(对 ...
- [ IE浏览器兼容问题 ] Web Uploader 在IE、FireFox下点击上传没反应
一.项目源码: > html > js 初始化插件: 事件绑定:avalon > web > 报错: - IE: 脚本缺少对象 - FireFox: js业务逻辑代码部分事件正 ...
- hdu1158 Employment Planning 2016-09-11 15:14 33人阅读 评论(0) 收藏
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- hdu 5012 模拟+bfs
http://acm.hdu.edu.cn/showproblem.php?pid=5012 模拟出骰子四种反转方式,bfs,最多不会走超过6步 #include <cstdio> #in ...
- c++日志输出库 spdlog 简介(3)多线程控制台输出日志
spdlog源码分析:https://www.cnblogs.com/eskylin/p/6483199.html spdlog的异步模式使得spdLog可以支持多线程,于是写了一个多线程的小例子: ...
- 执行js-----Selenium快速入门(十四)
Selenium能够执行js,这使得Selenium拥有更为强大的能力.既然能执行js,那么js能做的事,Selenium应该大部分也能做.这应该得益于JavascriptExecutor这个接口,而 ...
- GitHub设置使用SSH Key,用TortoiseGit进行Clone仓库
GitHub设置使用SSH Key的好处就是可以使用SSH连接,并且提交代码的时候可以不用输入密码,免密提交. 生成SSH Key 这里我们使用PuTTYgen来生成公钥(Public Key),私钥 ...
- BitAdminCore框架应用篇:(四)核心套件querySuite按钮功能
索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...