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新版中已经不推荐使用存储函数了