存储过程和存储函数
1. 存储过程
1.1 定义
是一组预编译的sql语句,也就是给pl/sql语句包装起来,完成一次创建任意调用的功能,相当于java中的方法。经编译之后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数的话)来执行它。
1.2 语法
create [or replace] procedure 存储过程名(参数名1 in/out 参数类型1,参数名2 in/out 参数类型2)
is/as
——声明部分
begin
——业务逻辑部分
end;
举个栗子:给指定员工涨薪,并打印涨薪前和涨薪后的工资。
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_output.put_line('涨薪后:'||(vsal+vnum));
--提交
commit;
end;
2. 存储函数
2.1 定义
通常存储函数是给存储过程调用的。
2.2 语法
create [or replace] function存储函数名(参数名1 in/out 参数类型1,参数名2 in/out 参数类型2) return 返回类型
is/as
——声明部分(声明结果变量)
begin
——业务逻辑部分
return (结果变量);
end;
举个栗子:查询指定员工的年薪。
create or replace function func_getsal(vempno number) return number
is
--声明变量.保存年薪
vtotalsal number;
begin
select sal*12 + nvl(comm,0) into vtotalsal from emp where empno = vempno;
return vtotalsal;
end;
3. 存储过程和存储函数的区别
1.存储函数可以有返回值也可以没有返回值,存储函数不许有返回值
2.存储过程和存储函数都可以通过输出参数out实现多个返回值
怎么选择?
原则上只有一个返回值用存储函数,否则用存储过程
但是我们一般都是用存储过程,因为
1.存储过程可以有返回值也可以没有返回值,存储的灵活性
2.存储过程既然有返回值了,可以替代存储函数
3.oracle新版中已经不推荐使用存储函数了
java中通过CallableStatement调用存储过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)