Oracle 存储过程

一. 存储过程

  1. 什么是存储过程
    简单点说:就是封装了一组sql语句 ,提前编译好,存储在服务端
    效率高,安全

  2. 使用场景:
    网上买了一件商品:商品表(update),订单表(insert),购物车(delete), 金额表(update),物流表(insert),日志表(insert)

  3. 语法
    create [or replace] procedure 过程名(参数名 输入型 in |输出型 out 数据类型 ,…)
    as | is
    – 声明变量
    begin

    end;

  4. 栗子: 给某员工涨工资(打印涨前,涨后的工资)
    create or replace procedure updateSal(eno in number ,money in number)
    as
    oldSal number;
    newSal number;
    begin
    select sal into oldSal from emp where empno = eno;
    dbms_output.put_line(‘涨前的工资:’ || oldSal);

    update emp set sal = sal + money where empno = eno;
    commit; -- 命令提交
    
    select sal into newSal from emp where empno = eno;
    dbms_output.put_line('涨后的工资:' || newSal);
    

end;
– 访问存储过程 – 只有输入参数
call updateSal(7788, -100);
4. 栗子:有输入参数有输出参数
获取某员工的年薪
– 输入参数:某员工 输出参数:员工的年薪
create or replace procedure getYearSal(eno in number ,yearsal out number)
is

begin
select sal * 12 + nvl(comm,0) into yearsal from emp where empno = eno;
end;
– 访问存储过程:有输入输出参数
declare
nianxin number;
begin
getYearSal(7788, nianxin);
dbms_output.put_line(nianxin);
end;
5. 栗子:有输入输出参数(游标)
cursor:静态的游标,在声明时,必须指定SQL语句;
sys_refcursor: 动态的游标,在声明时候不需要指定sql语句,什么时候用,什么是指定

– 获取某部门的所有的员工信息
– 输入型:某部门 输出型: 员工信息(多行)
create or replace procedure getEmpsByDeptno(dno in number ,emps out sys_refcursor)
as

begin
– 给动态的游标指定sql语句
open emps for
select * from emp where deptno = dno;
end;
– 访问存储过程
declare
emps sys_refcursor;
e_row emp%rowtype;
begin
getEmpsByDeptno(10,emps );
– 遍历
loop
–提取内容
fetch emps into e_row;
exit when emps%notfound;
dbms_output.put_line(e_row.empno||e_row.ename||e_row.job);
end loop;
close emps;
end;

Oracle的游标
Oracle的plsql基本语句
Oracle视图,索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值