oracle储存过程--存储过程

*存储过程*

*概念:*

之前我们编写的plsql程序可以进行表的操作,判断、循环逻辑处理的工作,但无法重复调用。

可以理解之前的代码全部编写在了main方法中,是匿名程序,java可以通过封装对象和方法来解决复用问题。

Plsql是将一个个plsql的业务员处理过程存储起来进行复用,这些被存储起来的plsql程序称之为存储过程。

*存储过程作用:*

\1. 在开发程序中,为了一个特定的业务功能,会向数据库进行多次连接关闭(连接关闭是很消费数据库资源的),需要对数据库进行多次i/o读写,性能比较低,如果把这些业务放到plsql中,在应用程序中只需要调用plsql就可以做到连接关闭一次数据库就可以实现我们的业务,可以大大提高效率。

\2. Oracle官方给的建议:能够让数据库操作的不要放在程序中。在数据库中实现基本上不会出现错误,在程序中操作可能会存在错误,(如果在数据库中操作数据,可以有一定的日志恢复等功能)

*语法*

Create or replace procedure 过程名称[(参数列表)] is
Begin

End [过程名称]

根据参数的类型,我们将其分为3类讲解:

不带参数的

带有输入参数的

带输入输出参数(返回值)的

*不带参数的存储过程:*


*小案例(热身)**打印输出:hello world*

create or replace procedure p_hello is
begin
   dbms_output.put_line('hello world');
end p_hello;

调用存储过程:

begin
 p_hello;
end;

我们刚才创建的存储过程:

注意:***

第一个问题:is 和 as是可以互相使用的,用哪个关键字是没有关系的

第二个问题:过程中没有declare关键字,declare用在语句块中

*带有输入参数的存储过程*

【示例】查询并打印某个员工(如7839号员工)的姓名和薪水-存储过程:要求,调用的时候传入员工编号,自动控制台打印。

create or replace procedure p_querynameandsal(i_empno in emp.empno%type) as
--声明变量
v_name  emp.ename%type;
v_sal emp.sal%type;
begin
  --查询emp表中某个员工的姓名和薪水并赋值给变量
  select ename,sal into v_name,v_sal from emp where empno=i_empno;
   dbms_output.put_line(v_name||'-'||v_sal);
end;
--end 后面的存储过程名字必须和前面声明的名字保持一致,要不就不要写

执行:

begin
 p_querynameandsal(7839);
end;

执行结果:KING-5000

*带输入输出参数的存储过程*

小案例;查询7839号员工的薪水,并将薪水结果返回并且输出。

create or replace procedure p_querysal_out(i_empno in emp.empno%type,o_sal out emp.sal%type) as

begin
  --查询emp表中某个员工的薪水并将查询返回
  select sal into o_sal from emp where empno=i_empno;

end;
--end 后面的存储过程名字必须和前面声明的名字保持一致,要不就不要写

执行该存储过程

declare
  --声明变量接收存储过程中的输出参数
  v_sal emp.sal%type;
  
begin
 p_querysal_out(7839,v_sal);
 dbms_output.put_line('薪水:'||v_sal);
end;

*执行结果:

薪水:5000

posted on   ~码铃薯~  阅读(351)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-01-10 oracle数据库-查询一张表中某个字段按照降序排列的前十条数据
2020-01-10 SQL语句-查询特定年份产生的数据
2020-01-10 SQL语句-查询一张表中某个字段存在相同值的数据

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示