oracle存储过程和自定义函数

Posted 小狮子zzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle存储过程和自定义函数相关的知识,希望对你有一定的参考价值。

如果只有一个返回值就用存储函数,否则,就用存储过程

存储过程存储函数都是存储在数据库中供所有用户程序调用的子程序。他们的区别就在于是否用return 语句返回值

存储过程:

--创建一个带参数的存储过程

--给指定的员工涨100块的工资,并且打印涨前和涨后的工资

 

CREATE OR REPLACE PROCEDURE SALARY (inno IN NUMBER,inzhang in number,zongshu out number )

 

AS

 

PSAL EMP.SAL%TYPE;--定义一个变量存储涨前的薪资

 

BEGIN

 

select sal into psal from emp where no = inno;--得到员工涨工资前的

 

update emp set sal = sal+ inzhang  where no = inno;--给员工涨工资
commit;
select sal into zongshu from emp where no = inno;
dbms_output.put_line(‘涨前:‘||psal||‘涨后:‘||(psal+inzhang));

 END;

调用该存储过程:

declare
inno number;
inzhang number;
zongshu number;
begin
  inno :=3;
  inzhang :=10;
  salary(inno,inzhang,zongshu);
end; 

存储函数:

语法:CREATE OR REPLACE FUNCTION 函数名(参数列表)

         return 函数值类型;

         as 

         PLSQL子程序体;

--存储函数:查询某个员工的年收入

CREATE OR REPLACE FUNCTION CHAXUN(inno in number)

return number

as

 psal emp.sal%type;--存放工资

 pcomm emp.comm%type;--存放奖金

begin

select sal,comm into psal,pcomm from emp where inno = no;--获取薪水和奖金

return psal*12+nvl( pcomm,0);   --函数与过程的结构类似,但是必须要有一个return子句,用来返回函数值

end:

/

in和out参数:过程和函数都可以通过out 指定一个或者是多个输出参数,我们可以利用out参数,在过程和函数中直线返回多个值。

--out参数实现查询员工姓名,月薪和职位

CREATE OR REPLACE PROCEDURE CHAXUNDUOGE (INNO IN NUMBER;OUTNAME OUT CHAR(12);OUTSAL OUT CHAR(12);OUTJOB OUT CHAR(20))

AS

begin

select  name,sal,job into OUTNAME,OUTSAL,OUTJOB from emp where no = inno;

end;

/

 












以上是关于oracle存储过程和自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

存储过程与自定义函数

MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别

30.4. MySQL函数,存储过程,触发器,视图

Oracle存储过程的异常处理

oracle 自定义函数

SQL Server中对存储过程的理解