Oracle快速入门(游标,抛出自定义异常信息,存储过程)

– 循环取数据

loop

fetch vrows into vrow; – 通过游标vrows取vrow当中的数据,将vrows 当中的数据放置到vrow

exit when vrows%notfound; --当vrows游标找不到的时候退出循环

dbms_output.put_line(‘姓名:’|| vrow.ename || ’ 工资:’ || vrow.sal);

end loop;

– 3、关闭游标

close vrows;

end;

在这里插入图片描述

在这里插入图片描述

2、带参数的游标

cursor 游标的名称[(参数名 参数类型)] is 查询的结果集

(1)输出指定部门下的员工姓名和工资

游标:指定部门的所有员工

声明一个变量记录一行数据

declare

– 声明游标

cursor vrows(dno number) is select * from emp where deptno = dno;

– 声明变量

vrow emp%rowtype;

begin

– 1、打开游标,指定10号部门

open vrows(10);

– 2、循环遍历,取数据

loop

fetch vrows into vrow; – 通过游标vrows取vrow当中的数据,将vrows 当中的数据放置到vrow

exit when vrows%notfound; --当找不到的时候退出

dbms_output.put_line(‘姓名:’|| vrow.ename || ’ 工资:’ || vrow.sal);

end loop;

– 关闭游标

close vrows;

end;

在这里插入图片描述

在这里插入图片描述

三、系统引用游标


1、系统引用游标语法

(1)声明游标 : 游标名 游标类型 sys_refcursor

(2)打开游标:open 游标名 for 结果集

(3)从游标当中取数据

(4)关闭游标

2、案例演示

select * from emp;

declare

– 声明系统引用游标

vrows sys_refcursor;

– 声明一个变量来用于记录数据

vrow emp%rowtype;–指向emp表的表头

begin

–1、打开游标

open vrows for select * from emp;

– 2、取数据

loop

fetch vrows into vrow;–将vrows 当中的数据放置到vrow,vrow会不断循环向下走

exit when vrows%notfound;

dbms_output.put_line(‘姓名:’|| vrow.ename || ’ 工资:’ || vrow.sal);

end loop;

close vrows;

end;

在这里插入图片描述

四、扩展内容,,使用for循环遍历游标


for循环遍历游标:不需要声明额外变量,不需要打开游标,不需要关闭游标 if

– 使用for循环来遍历游标

declare

– 声明一个游标

cursor vrows is select * from emp;

begin

for vrow in vrows loop

dbms_output.put_line(‘姓名:’|| vrow.ename || ’ 工资:’ || vrow.sal || vrow.sal || ‘工作:’ || vrow.job);

end loop;

end;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、例外(意外):程序运行的过程当中发生异常,相当于是Java当中的异常


1、捕获异常的语法

declare

– 声明变量

begin

– 业务逻辑 判断和循环

exception – 捕获异常

– 处理异常

when 异常一 then

when 异常二 then

when others then

…处理其他异常

end;

2、Oracle当中常见的异常
zero_divide : 除零异常
value_error : 类型转换异常
too_many_rows : 查询出多行记录,但是赋值给了一行记录,rowtype记录一行数据的变量
no_data_fount : 没有找到数据
(1)发生了除零异常

declare

vi number;

begin

vi := 8/0;

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when others then

dbms_output.put_line(‘发生了其他异常’);

end;

在这里插入图片描述

(2)其他异常:类型转换异常

给数字类型的变量赋值字符串,发送异常

declare

vi number;

begin

vi := ‘aaa’;

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when others then

dbms_output.put_line(‘发生了其他异常’);

end;

在这里插入图片描述

(3)捕获类型转换异常

declare

vi number;

begin

vi := ‘aaa’;

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when value_error then

dbms_output.put_line(‘发生了类型转换异常’);

when others then

dbms_output.put_line(‘发生了其他异常’);

end;

在这里插入图片描述

(4)too_many_rows : 查询出多行记录,但是赋值给了一行记录,rowtype记录一行数据的变量

declare

vi number;

– 记录一行变量

vrow emp%rowtype;

begin

select * into vrow from emp;

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when value_error then

dbms_output.put_line(‘发生了类型转换异常’);

when too_many_rows then

dbms_output.put_line(‘查询出多行记录,但是赋值给了一行记录,rowtype记录一行数据的变量’);

when others then

dbms_output.put_line(‘发生了其他异常’);

end;

在这里插入图片描述

(5) 没有找到数据的异常

declare

vi number;

– 记录一行变量

vrow emp%rowtype;

begin

select * into vrow from emp where empno = 123456; – 查询数据并赋值给vrow

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when value_error then

dbms_output.put_line(‘发生了类型转换异常’);

when too_many_rows then

dbms_output.put_line(‘查询出多行记录,但是赋值给了一行记录,rowtype记录一行数据的变量’);

when others then

dbms_output.put_line(‘发生了其他异常’ || sqlerrm);

end;

在这里插入图片描述

详细的捕获异常

declare

vi number;

– 记录一行变量

vrow emp%rowtype;

begin

select * into vrow from emp where empno = 123456; – 查询数据并赋值给vrow

exception

when zero_divide then

dbms_output.put_line(‘发生了除零异常’);

when value_error then

dbms_output.put_line(‘发生了类型转换异常’);

when too_many_rows then

dbms_output.put_line(‘查询出多行记录,但是赋值给了一行记录,rowtype记录一行数据的变量’);

when no_data_found then

dbms_output.put_line(‘没有找到数据异常’);

when others then

dbms_output.put_line(‘发生了其他异常’ || sqlerrm);

end;

在这里插入图片描述

六、抛出自定义异常信息


1、语法

异常名 exception;

rasie 异常;

2、查询指定编号的员工,如果没有找到,则抛出自定义的异常。

a、声明一个变量 % rowtype 。

b、查询员工信息信息,保存起来。

c、判断员工信息是否为空。

d、如果是则抛出异常。

(1)抛出其他异常

select * from emp;

– 查询指定编号的员工,如果没有找到,则抛出自定义的异常

declare

– 1、声明一个变量 %rowtype

vrow emp%rowtype;

– 2、声明一个自定义的异常

no_emp exception;

begin

– 3、查询员工信息,保存起来

select * into vrow from emp where empno = 8888;–抛出异常

if vrow.sal is null then

raise no_emp; – 抛出自定义的异常

end if;

exception

– 捕获异常

when no_emp then

dbms_output.put_line(‘输出了自定义的异常’);

when others then

dbms_output.put_line(‘输出了其他异常’|| sqlerrm);

end;

在这里插入图片描述

(2)错误演示,抛出指定异常

%found % notfound

声明一个游标

声明一个变量,记录数据

从游标当中取记录,如果取到了

如果有,则不管

如果没有就抛出自定义异常

declare

– 声明游标vrows是查询表当中的empno = 8888

cursor vrows is select * from emp where empno = 8888;

–声明记录型的变量,声明记录型,指向emp表的表头

vrow emp%rowtype;

– 声明一个自定义异常

no_emp exception;

begin

– 1、打开游标

open vrows;

– 2、取数据

fetch vrows into vrow;

– 3、判断游标是否有数据

if vrows%notfound then

raise no_emp;–raise申请这个异常

end if;

close vrows;

– 捕获异常

exception

when no_emp then

dbms_output.put_line(‘发生了自定义的异常’);

end;

在这里插入图片描述

在这里插入图片描述

七、存储过程 :实际上是封装在服务器上一段PLSQL代码片段,已经编译好了的代码


1、客户端去调用存储过程,执行效率就会非常高高效
2、语法 :

create [or replace] procedure 存储过程的名称(参数名 in|out 参数类型)is | as

is | as

–声明部分

begin

– 业务逻辑

end;

3、给指定员工涨薪,并打印涨薪前和涨薪后的工资

参数:in 员工编号

参数:in 涨多少

声明一个变量:存储涨工资前的工资

查询出当前工资是多少

打印涨薪前的工资

更新工资

打印涨薪后的工资

create or replace procedure proc_updatesal(vempno in number,vnum in number)

is

–声明变量,记录当前工资

vsal number;

begin

– 查询当前工资

select sal into vsal from emp where empno = vempno;

–输出涨薪前的工资

dbms_output.put_line(‘涨薪前:’ || vsal);

–更新工资

update emp set sal = vsal + vnum where empno = vempno;

–输出涨薪后的工资

dbms_ouput.put_line(‘涨薪后:’ || (vsal+vnum));

–提交事务

commit;

end;

在这里插入图片描述

– 方式1

call proc_updatesal(7788,10);

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
l(7788,10);

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-XyJpthhg-1715865392633)]

[外链图片转存中…(img-odWBPLrJ-1715865392634)]

[外链图片转存中…(img-5rzCCg0U-1715865392634)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值