Oracle 存储过程 存储函数

存储过程

  关键字procedure       or replace 作用: p1已经存在时 直接修改        创建一个过程函数 p1  参数是 emp中的  员工id类型

  p1的参数类型还可以加   in   out      默认不写就是 in

create or replace procedure p1(eno emp.empno%type)
is

begin
  update emp set sal = sal+1000 where empno = eno;        修改员工工资
end;

 使用 过程

declare

begin
  p1(7788);            7788员工的工资就加了1000
end;

存储函数

    就是定一个函数 有返回值   关键字 function       在定义时需要将返回值 定义在  is 内   然后给它赋值就可以了  返回了

   注意 return  的后面只能定义它的类型  不能定义返回的范围  number(10) 

create or replace function f_yearsal(eno emp.empno%type) return number
is
       s number(10);
begin
  select sal*12+nvl(comm,0) into s from emp where empno= eno;   计算员工的年薪
  return s;
end;

  使用函数  因为 函数 f_yearsal有返回值  所以需要定义一个  变量来接受它    

declare
  s number(10);
begin
  s :=f_yearsal(7788);
  dbms_output.put_line(s);
end;

out  和 in 使用

    使用 过程计算年薪          因为过程没有返回值   所以需要 再定义一个 输出类型的参数yearsal 

create or replace procedure p_yearsal(eno emp.empno%type,yearsal out number) 参数也不能加范围
is
       s number(10);
       c emp.comm%type;        分别给工资和奖金赋值
begin    
  select sal*12,nvl(comm,0) into s,c from emp where empno= eno;
  yearsal :=s+c;
end;

    当执行完p_yearsal 后      yearsal 就有值了    定义一个变量接受 

declare
  yearsal number(10);
begin
  p_yearsal(7788,yearsal);
  dbms_output.put_line(yearsal);
end;

   什么时候用out    当遇到  :=   或者 into 赋值语句给变量赋值的时候   都必须是out的   

  列如  过程   p_yearsal(eno emp.empno%type,yearsal out number)     eno没有给他 := 或into  就是in   而yearsal 有 :=赋值

过程和函数的区别

   存储过程 没有返回值      存储函数有返回值    多了两个return    

  如果想用 存储过程  实现有返回值  就必须使用  out类型的 参数, 但是其本质 也不是有返回值,而是 执行完毕后 给 这个参数赋值

可以用 存储函数 来自定义 函数   列如单行函数 upper,就是利用 存储函数的有返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值