通过存储过程操作临时表实现对表的增删改

A为表名 A_TR为临时表(操作完自动删除里面数据),下面是存储过程代码:

create or replace procedure A_UPDATE(p_id in varchar2)

as  

user_err exception; -- user exception                                  

user_err_code varchar2(200); -- contents of user error                         

err_sqlcode   varchar2(100); -- err code                                         

proc_name     varchar2(30) := 'a_update';  

tran_name     varchar2(30) := 'a_tr_tbl';

-- a_tr_tbl transaction  

cursor c_atr is select * from a_tr_tbl where USERID = p_id for update;  

atr_rec      a_tr_tbl%rowtype;

-- a_tbl  

cursor c_a is select * from a_tbl where name= atr_rec.name

AND id= atr_rec.id for update;  

a_rec      a_tbl%rowtype;   

begin

  open c_atr;  

  fetch c_atr into atr_rec;  

  while c_atr%found loop

-- a_tbl insert             

insert into a_tbl values (atr_rec.name,       

atr_rec.id,       

atr_rec.desc    

); --FREE_SPACE    

end if;    

-- a_tbl update    

open c_a;      

fetch c_a into a_rec;      

if c_a%notfound then      

user_err_code := 'update a_tbl not found';      

raise user_err;      

end if;            

update a_tbl set name= atr_rec.name,      

desc= atr_rec.desc    

 where current of c_a;       

close c_a;

end if;

-- a_tbl delete   

 open c_a;  

fetch c_a into a_rec;    

if c_a%notfound then    

user_err_code := 'delete a_tbl not found';    

raise user_err;    

end if;

    delete from a_tbl where current of c_a;     

close c_a;    

end if;    

delete from a_tr_tbl where current of c_atr;         

fetch c_atr into atr_rec;    

end loop;    

close c_atr;

exception  

when user_err then    

rollback;    

insert into err_tbl values(p_id, ' ', proc_name, user_err_code, sysdate, tran_name);  

when others then    

rollback;    

err_sqlcode := sqlcode || SQLERRM;

   insert into err_tbl values(p_id, ' ', proc_name, err_sqlcode, sysdate, tran_name);

end A_UPDATE; /

转载于:https://www.cnblogs.com/xf1224/p/4475366.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值