存储过程与存储函数的区别
存储函数:可以通过return语句返回函数值;主要用于计算并返回一个值;
存储过程:不能;存储过程没有直接返回值,主要用于执行操作;
由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。而存储函数仍然存在,是由于oracle不断升级,需要实现向下兼容,所以存储函数就一直存留着。
创建表并添加数据
create table EMP
(
empno VARCHAR2(16) not null,
ename VARCHAR2(16) not null,
sal NUMBER,
comm NUMBER,
job VARCHAR2(16),
deptno NUMBER
);
insert into EMP (empno, ename, sal, comm, job, deptno) values ('7839', 'xiaoming', 1200, 500, 'Actor', 12);
insert into EMP (empno, ename, sal, job, deptno) values ('7566', 'xiaowang', 800, 'Lawyer', 12);
commit;
1)存储过程:
语法:
create [or replace] procedure 存储过程名 [(参数1 in|out 类型,参数2 in|out 类型..)] --in输入参数,out输出参数
is|as --相当于PLSQL语句中的declare,用来声明变量,游标等,但是不可以省略
变量名 类型; --声明变量
begin
程序代码体 --业务逻辑
end;
/
创建存储过程:
create or replace procedure addSal(pename in emp.ename%type)
as
beforesal emp.sal%type;
aftersal emp.sal%type;
begin
select sal into beforesal from emp where ename=pename;
aftersal:=beforesal+100;
update emp set sal=aftersal where ename=pename;
end;
/
测试:
declare
v_a EMP.ENAME%type;
v_b EMP.ENAME%type;
begin
v_a :='xiaoming';
v_b :='xiaowang';
addSal(v_a);
addSal(v_b);
end;
/
2)存储函数:
语法:
create [or replace] function 存储函数的名称 [(参数1 in|out 类型,参数2 in|out 类型..)] --in输入参数,out输出参数
return 参数类型
is|as --相当于PLSQL语句中的declare,用来声明变量,游标等,但是不可以省略
变量名 类型; --声明变量
begin
程序代码体 --业务逻辑
end;
/
创建存储函数:
create or replace function nianxin(pempno in number)
return number
as
psal emp.sal%type;
pcomm emp.comm%type;
begin
select ename,sal,comm into psal,pcomm from emp where empno = pempno;
return psal*12+nvl(pcomm,0);
end;
/
测试:
declare
v_a number;
v_b number;
begin
v_a:=nianxin(7839);
v_b:=nianxin(7566);
dbms_output.put_line('年薪:'||v_a);
dbms_output.put_line('年薪:'||v_b);
end;
/
简单的入门语法就是这样的,剩下的就是加逻辑和业务啥的。看自己需要往代码块加内容就可以了。