Oracle 创建存储过程

create or replace procedure DongjieToTable                             --创建一个名为donjietotable的存储过程
as                                                                                                        --定义数据区
  cursor c_qydjsx                                                                              --定义一个游标
    is select nbxh from aqydjsx;
  cursor c_sttzqk
    is select tznbxh from asttzqk;

  V_nbxh varchar2(40);                                                                  --定义一个变量
  V_tznbxh varchar2(40);
 
begin                                                                                                --代码块开始区
     open c_qydjsx();                                                                       --打开一个游标
     fetch c_qydjsx into V_nbxh;   
     while c_qydjsx%found loop
       update aqydjsx set djlx = '01'
       where '1' in
       (select sfjd from qydongjie where qynbxh=V_nbxh and djjdjzsj = (select max(djjdjzsj) from qydongjie where qynbxh=V_nbxh))
       and '0' not in
       (select sfjd from qydongjie where qynbxh=V_nbxh and djjdjzsj = (select max(djjdjzsj) from qydongjie where qynbxh=V_nbxh))
       and nbxh = V_nbxh;         
     fetch c_qydjsx into V_nbxh;
     end loop;
     commit;
     open c_sttzqk();
     fetch c_sttzqk into V_tznbxh;   
     while c_sttzqk%found loop
       update asttzqk set djlx = '01'
       where '1' in
       (select sfjd from qydongjie where qynbxh=V_tznbxh and djjdjzsj = (select max(djjdjzsj) from qydongjie where qynbxh=V_tznbxh))
       and '0' not in
       (select sfjd from qydongjie where qynbxh=V_tznbxh and djjdjzsj = (select max(djjdjzsj) from qydongjie where qynbxh=V_tznbxh))
       and tznbxh = V_tznbxh;          
     fetch c_sttzqk into V_tznbxh;
     end loop;
     commit;
  EXCEPTION                                                                           --异常块,当以上代码执行有异常时将执行这里
  WHEN others THEN

    rollback;
end;                                                                                            --结束代码块


 要执行创建好的存储过程在Command中exec dongjietotable;

 

如果在代码中要根据一个动态的值去查一个表,那么可以用有参游标

创建方法

cursor c_qynjjbqk(EpNbxh varchar2)                                         --变量名为EpNbxh,类型为varchar2
   is select max(nd) from qynjjbqk where nbxh=EpNbxh;

调用方法

open c_qynjjbqk(nbxh);                                                               --"()"内为要传入的参数值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值