Oracle存储过程和存储函数

Oracle存储过程和存储函数

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

创建存储过程语法:

create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

AS

begin

PLSQL子程序体;

End;


或者


create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

is

begin

PLSQL子程序体;

End 过程名;


范例1:给指定的员工涨100工资,并打印出涨前和涨后的工资

分析:我们需要使用带有参数的存储过程

createorreplaceprocedureaddSal1(enoinnumber)is

pemp myemp%rowtype;

begin

select/*intopempfrommyempwhereempno = eno;

updatemyempsetsal = sal +100whereempno = eno;

dbms_output.put_line(‘涨工资前’|| pemp.sal ||’涨工资后’|| (pemp.sal +100));

endaddSal1;

调用

begin

– Call the procedure

addsal1(eno =>7902);

commit;

end;

4.存储函数

create or replace function函数名(Name in type, Name out type, …)return数据类型 is

结果变量 数据类型;

begin


return(结果变量);

end[函数名];


存储过程和存储函数的区别

一般来讲,过程和函数的区别在于函数可以有一个返回值;而过程没有返回值。

但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。

范例:使用存储函数来查询指定员工的年薪

createorreplacefunctionempincome(enoinemp.empno%type)returnnumberis

psal emp.sal%type;

pcomm emp.comm%type;

begin

selectt.salintopsalfromemp twheret.empno = eno;

returnpsal /*12+ nvl(pcomm,0);

end;

使用存储过程来替换上面的例子

createorreplaceprocedureempincomep(enoinemp.empno%type, incomeoutnumber)is

psal emp.sal%type;

pcomm emp.comm%type;

begin

selectt.sal, t.commintopsal, pcommfromemp twheret.empno = eno;

income :=psal/*12+nvl(pcomm,0);

endempincomep;

调用:

declare

incomenumber;

begin

empincomep(7369, income);

dbms_output.put_line(income);

end;


本作品采用知识共享署名 4.0 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自御前提笔小书童,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:https://royalscholar.cn/2017/05/17/Oracle存储过程和存储函数/

# Oracle

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×