美文网首页Java工作生活
Oracle之存储过程和存储函数

Oracle之存储过程和存储函数

作者: 问题_解决_分享_讨论_最优 | 来源:发表于2019-11-01 00:06 被阅读0次

1.存储过程

将一段已经编译好的代码,封装到数据库中

1. 作用 :

提高了代码的复用性

因为以及编译好了,可以提高了执行效率

关键字 - procedure /prə’siːdʒə/ 过程,程序,手续

2. 语法:

create [or replace] procedure

    过程名称(参数1 in|out 参数类型,参数2 in|out 参数类型)

  is | as

    -- 声明

  begin

    -- 业务

  end;

调用方法:

    一: call 过程名称(参数);

    二: plsql中使用:

        begin

            过程名称(参数);

        end;   

1.输入参数

定义一个存储过程,给员工编号为7369的员工涨1000工资

代码实现:

create or replace procedure

  update_sal(vempno in number,vcount in number)

is

  -- 声明变量记录当前工资

  cur_sal number;

begin

  -- 先查询涨工资前的工资

  select sal into cur_sal from emp where empno = vempno;

  dbms_output.put_line('涨工资前: '||cur_sal);

  -- 更新工资

  update emp set sal = sal + vcount where empno = vempno;

  -- 涨工资后的工资

  dbms_output.put_line('涨工资后: '||(cur_sal+vcount));

  commit;

end;

调用:

call update_sal(7369,1000);

begin

    update_sal(7369,1000);

end;

2.输出参数

根据员工编号,得到年薪

create or replace procedure

  year_sal(vempno in number,vyearsal out number)

as

begin

  select sal*12 + nvl(comm,0) into vyearsal --nvl(a,b) 如果a为null,则取b

    from emp where empno = vempno;

end;

调用:

declare

  yearsal number;

begin

  year_sal(7369,yearsal);

  dbms_output.put_line(yearsal);

end; 

3.输出的是游标类型:

游标的类型是sys_refcursor

打开游标并获取数据一步合成:

open 游标名 for 查询语句

定义游标:

create or replace procedure

  findall_cursor(vcursor out sys_refcursor)

is

begin

  --打开游标,指定结果集

  open vcursor for select * from emp;

end;

emp%rowtype 指的是emp的行类型

%type可以使变量获得与字段相同的数据类型

调用

declare

  yb sys_refcursor;

  -- 定义一个vrow变量,类型是emp的行类型

  vrow emp%rowtype;

begin

  findall_cursor(yb);

  loop

      fetch yb into vrow;

      exit when yb%notfound;

      dbms_output.put_line('编号:'||vrow.empno||' 姓名:'||vrow.ename);

  end loop;

  -- 关闭游标

  close yb;

end;

2.存储函数

实质是跟存储过程一样

和存储过程的区别:

函数有返回值,过程没有,函数的返回值可以用:=接收

函数可以直接在sql中调用,过程不能

函数和过程都实现对方的功能.

语法:

create [or replace] function

    函数名称(参数1  参数类型) return 返回类型

  is

    返回变量 变量类型

  begin

    ...

    return 返回变量

  end;

定义一个存储函数,根据员工编号计算一个月的纳税,税率15%

代码:

create or replace function

  fun_getTax(vempno number) return number

is

  vtax number;

begin

  select sal*0.15 into vtax from emp where empno = vempno;

  return vtax;

end; 

调用:

declare

  vtax number;

begin

  vtax := fun_getTax(7369);

  dbms_output.put_line(vtax);

end;

打个广告,本人博客地址是:风吟个人博客

相关文章

  • Oracle之存储过程和存储函数

    1.存储过程 将一段已经编译好的代码,封装到数据库中 1. 作用 : 提高了代码的复用性 因为以及编译好了,可以提...

  • ORACLE之存储过程和函数

    存储过程 定义 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语...

  • Oracle之存储过程与存储函数

    存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程或者存储函数;存储过程和存储函数相同点:完成...

  • oracle之存储过程、函数、包

    参考链接 Oracle创建存储过程、创建函数、创建包——博客园@helong ORACLE执行存储过程权限不足—...

  • PostgreSQL Oracle 兼容性之存储过程

     在oracle中,函数和存储过程是经常使用到的,并且有所区别;而postgresql中函数和存储过程都是相同定义...

  • MySQL 视图和存储程序

    MySQL 视图和存储程序 存储程序:存储函数、存储过程、触发器和事件的总称。 存储例程:存储函数+存储过程。 触...

  • PL/SQL之存储过程

    存储过程、存储函数和触发器 存储过程和存储函数定义:指存储在数据库中供所有用户程序调用的子程序叫存储过程或存储函数...

  • Oracle存储过程与存储函数-入门

    一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解...

  • java数据库之存储过程

    一、存储过程简介 1.1存储过程描述 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程。 ...

  • 深入浅出MySQL之开发篇(二)

    继续深入了解MySQL的高级特性。 1.存储过程和函数 什么是存储过程和函数 存储过程和函数是事先经过编译并存储在...

网友评论

    本文标题:Oracle之存储过程和存储函数

    本文链接:https://www.haomeiwen.com/subject/eupxbctx.html