Oracle数据库学习笔记 (六 —— 开发子程序和包),java面试框架问题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

开发过程

过程一般用于执行一个指定的操作,可以将常用的特定操作封装成过程

CREATE [OR REPLACE] PROCEDURE procedure_name

(argument1 [mode1] datatype1,

argument2 [mode2] datatype2, …)

IS [AS]

声明部分

BEGIN

执行部分

EXCEPTION

异常处理部分

END;

2.2 创建过程:无参数
  • 创建一个无参的过程

  • 执行过程 (三种方法)

创建

– 创建一个过程

create table dept1 as select * from dept – 复制 dept 表

select * from dept1

create or replace procedure pro_dept_del – 创建一个删除的过程

as

begin

delete from dept1 where DEPTNO=10;

end;

执行

call pro_dept_del();

begin

pro_dept_del;

end;

exec pro_dept_del

2.4 创建过程:带有 IN 参数
  • 当为过程定义参数时,如果不指定参数模式,则默认为输入参数
小测试:

根据输入的员工编号输出该员工的工资

create or replace procedure

pro_query_emp(v_no in emp.empno%type)

as

v_sal emp.sal%type;

begin

select sal into v_sal from emp where empno=v_no;

dbms_output.put_line(‘该员工薪水为:’||v_sal);

exception

when no_data_found then

dbms_output.put_line(‘找不到该员工!’);

end;

2.5 创建过程:带有 out 参数
  • 过程不仅可以用于执行特定操作,还可以用于输出数据

  • 在过程中输出数据时,需要使用OUT或IN OUT参数来完成

  • 修改刚才的过程让员工工资作为输出参数

create or replace procedure

pro_query_emp(v_no in emp.empno%type, out_sal out number)

as

begin

select sal into out_sal from emp where empno=v_no;

exception

when no_data_found then

dbms_output.put_line(‘找不到该员工!’);

end;

调用带有 out 的参数
  • 必须定义变量接收输出参数

declare

v_no emp.empno%type;

v_sal emp.sal%type;

begin

v_no:=&no;

pro_emp_sal(v_no,v_sal);

dbms_output.put_line(‘薪水是:’||v_sal);

end;

2.6 创建过程:带有IN OUT 参数
  • IN OUT参数也称为输入输出参数,当使用这种参数时,在调用过程之前需要通过变量给该种参数传递数据,调用结束后,Oracle会通过该变量将过程结果传递给应用

alter table dept1 add(level1 number(2)); – 给 dept1 添加一列数据

select * from dept1

– 创建查询的过程

create or replace procedure pro_dept_query(v_no in dept.deptno%type,v_loc out dept.loc%type)

as

begin

select loc into v_loc from dept where deptno=v_no;

end;

– 调用过程

declare

v_no dept.deptno%type;–部门编号

v_loc dept.loc%type;–部门的所在地

begin

v_no:=&no;

pro_dept_query(v_no,v_loc);

dbms_output.put_line(v_loc);

end;

2.7 过程多参传递
  • 使用过程进行多餐传递

  • 为形参传递变量和数据采用

  • 位置传递

  • 名称传递

  • 组合传递

– 定义插入的过程

create or replace procedure

pro_add_dept(v_deptno number,v_dname varchar2, v_loc varchar2)

as

begin

insert into dept values(v_deptno,v_dname,v_loc);

end;

2.7.1 按位置传递
  • 按位置传递按位置传递是指在调用时按参数的排列顺序依次写出实参的名称,将形参与实参关联起来进行传递

  • 在这种方法中,形参与实参的名称是相互独立、没有关系的,次序才重要

– 按位置传参

exec pro_add_dept(70,‘研发部’,‘北京’);

– 指定参数的名称通过 => 来实现

call pro_dept1_insert(v_deptno=>50,v_loc=>‘东京’,v_name=>‘cc’);

– 混合

call pro_dept1_insert(60,v_loc=>‘广东’,v_name=>‘dd’);

2.7.2 按名称传参
  • 按名称传递是指在调用时按照形参与实参的名称写出实参所对应的形参,将形参与实参关联起来进行传递

  • 在这种方法中,形参与实参的名称是相互独立、没有关系的,名称的对应关系很重要,但次序不重要

  • 名称传递在调用子程序时指定参数名,并使用关联符号“=>”为其提供相应的数值或变量

call pro_add_emp(v_deptno=>90,v_loc=>‘南京’,v_dname=>‘软件部’);

2.7.3 组合传递
  • 可以将按位置传递、按名称传递两种方法在同一调用中混合使用

  • 但前面的实参必须使用按位置传递方法,而后面其余的实参则可以使用按名称传递的方法

call pro_add_emp(90,v_loc=>‘南京’,v_dname=>‘软件部’);

三、函数

  • 函数用于返回特定数据,如果在应用程序中经常需要通过执行SQL语句来返回特定数据,则可以基于这些操作创建特定的函数

语法:

CREATE [OR REPLACE] FUNCTION function_name

(argument1 [model] datatype1,

argument2 [mode2] datatype2,

…)

RETURN datatype

IS|AS

声明部分

BEGIN

执行部分

EXCEPTION

异常处理部分

END;

3.1 创建函数
  • 当创建函数时,通过使用输入参数,可以将应用的数据传递到函数中,最终通过执行函数可以将结果返回到应用程序中

  • 当定义参数时,如果不指定参数模式,则默认为输入参数

– 创建函数

create or replace function fun_getrandom return number

as

v_num number;–存储返回值

begin

v_num:=floor(dbms_random.value(1,10));–产生随机数

return v_num;–返回随机数

end;

– 使用函数

declare

num number;

begin

num:=fun_getrandom();

dbms_output.put_line(num);

end;

3.2 创建带输出的函数
  • 输入员工编号,获得员工所在部门

create function getDept(eno number,deptName out VARCHAR2)

return VARCHAR2

as

v_address VARCHAR2(40);

begin

select dName, loc into deptName, v_address from dept, emp

where dept.deptno= emp.deptno and empno=eno;

return v_address;

end;

declare

address VARCHAR2(30);

deptName VARCHAR2(20);

begin

address:=getDept(7654,deptName);

dbms_output.put_line(‘部门名称:’||deptName);

dbms_output.put_line(‘部门地址:’||address);

end;

3.3.3 过程 与 函数 的比较
  • 过程与函数的相同功能及特性

  • 都使用IN模式的参数传入数据、OUT模式的参数返回数据

  • 输入参数都可以接收默认值,都可以传值

  • 调用时的实参都可以使用位置表示法或名称表示法

  • 都有声明部分、执行部分和异常处理部分

  • 一般而言,如果需要返回多个值或不返回值,就使用过程

如果只需要返回一个值,就使用函数

  • 虽然函数带OUT模式的参数也能返回多个值,但是一般都认为这种方法属于不好的编程习惯或风格

  • 过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值

四、包

4.1 创建包

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值

四、包

4.1 创建包

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-wNp3IFbF-1713424644316)]

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

[外链图片转存中…(img-wJvJuQup-1713424644317)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-odqAUc2b-1713424644317)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值