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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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语句-查询一张表中某个字段存在相同值的数据