oracle IF_8.oracle敲黑板--存储过程(无参篇)

本文详细介绍了Oracle存储过程的概念、使用原因及其优势。通过一个具体的案例展示了如何创建、删除和调用存储过程,用于更新员工奖金并记录变更日志。在案例中,创建了一个存储过程`emp_upcomm`,根据部门编号筛选员工,对奖金为0或空的员工调整奖金,并在日志表`rz`中记录相关信息。最后,验证了存储过程的执行效果。
摘要由CSDN通过智能技术生成

1.什么是存储过程

事先运用oracle语法,写好的一段具有业务功能的程序版段,长期保存在oracle服务器中,供oracle客户端(sqlplus)和程序语言远程访问

2.为什么要使用存储过程:

  • pl/sql一般语句每次执行都要整体运行一遍,才有结果
  • pl/sql不能将其封装起来,长期保存在oracle服务器中
  • pl/sql不能被其他应用程序调用,如java

优点:存储过程存储在数据库的服务器中,应用程序使用时只需要调用即可,存储过程只在创建时进行编译,以后每次执行存储过程,不需要再重新编译,而一般sql语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度

3.创建结构

a03c00dfd9314bba738f466efa073421.png

4.删除:

drop procedure 存储过程名

5.调用:

  • plsql语句中:
begin
存储过程名;
end;
  • 命令提示符中
execute 存储过程名;

6.案例(无参)---有参的存储过程见下一篇文章

  • 无参案例:

使用存储过程,在部门表中部门编号为10,30的所有员工中,对奖金为0或空的员工,奖金变为工资的40%, 对奖金不为空的,奖金增加10%(原奖金的1.1倍) 同时记录奖金变更的时间,原奖金,新奖金,员工编号,员工姓名(需要创建日志表)

//题中要用到日志表,那么先把准备工作做好,把表创好
create table rz(
        da date,
        oldcomm number(10),
        newcomm number(10),
        empno number(10),
        ename varchar2(20));

//下面正式开始做题
create or replace procedure emp_upcomm
as
voldcomm number(10);
vnewcomm number(10);
vsal number(10);
vno number(10);
vname varchar2(20);
//因为要取emp多行的数据,则必须要创建游标进行取多行数据
cursor c is select empno,ename,comm,sal from emp where deptno in(10,30);  
begin
   open c;
       loop
           fetch c into vno,vname,voldcomm,vsal;
           exit when c%notfound;
               if voldcomm is null or voldcomm=0 then
                    vnewcomm:=vsal*0.4;
                    update emp set comm=vnewcomm where empno=vno;
                    insert into rz values
                    (sysdate,voldcomm,vnewcomm,vno,vname);
               else
                    vnewcomm:=voldcomm*1.1;
                    update emp set comm=vnewcomm where empno=vno;
                    insert into rz values
                   (sysdate,voldcomm,vnewcomm,vno,vname);
               end if;
       end loop;
   close c;
end;

//开始调用
begin
emp_upcomm   //存储过程名
end;

//验证
select * fromm emp  //看emp有没有更新
select * from rz   //看日志表中是否记录了数据
  • 验证展示结果:

select*from emp

94ab76e24beab164c5b756c14155512d.png

select*from rz

fd3d46525127fd4a9c4be81ab83b166c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值