最后
给大家送一个小福利
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
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循环遍历游标:不需要声明额外变量,不需要打开游标,不需要关闭游标 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 涨多少
声明一个变量:存储涨工资前的工资
查询出当前工资是多少
打印涨薪前的工资
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!
参数:in 员工编号
参数:in 涨多少
声明一个变量:存储涨工资前的工资
查询出当前工资是多少
打印涨薪前的工资
最后如何让自己一步步成为技术专家
说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。
当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。
推荐一份Java架构之路必备的学习笔记,内容相当全面!!!
[外链图片转存中…(img-YqqHtwTD-1715222470395)]
成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。
你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!
进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!
【关注】+【转发】+【点赞】支持我!创作不易!