oracle用sql实现一个简单的存储过程:循环给user表的一个字段赋值

王牛付付cleangh 2017-03-09 06:20:36
user表中有id,m,n,k四个字段。现在k为空。

写一个存储过程proc_test:
传入参数:id=3,a=2008,b=2012.
实现目的:依次给每行的字段k赋值。
(从m=2008开始,循环到2012

如果n是0,代表没缴费,将当前行的k设为空。
如果n是2,代表缴费了,再看上一年的k值是否为空,如果不为空,将当前行的k值设为与上一年的相同k值。
如果上一年的K值为空,将当前行的K值设为当前行的m值.
...全文
409 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
js14982 2017-03-09
  • 打赏
  • 举报
回复
create or replace PROCEDURE proc_test
(v_id in varchar2,
a  in varchar2,
b  in varchar2
)
is
v_n varchar2(10);
begin 

for i in a..b loop
select n into v_n from user where m=i and id=v_id;
if v_n=0 then
update user set k is null where m=i and id=v_id;
elseif v_n=2 then
update user set k=nvl(lag(n)over(order by m),m) where m=i and id=v_id;
end if;
commit;  
end loop;
end proc_test;
js14982 2017-03-09
  • 打赏
  • 举报
回复
create or replace PROCEDURE proc_test
(v_id in varchar2,
a  in varchar2,
b  in varchar2
)
is
v_n varchar2(10);
begin 

for i in a..b loop
select n into v_n from user where m=i and id=v_id;
if v_n=0 then
update user set k is null where m=i and id=v_id;
elseif v_n=2 then
update user set k=nvl(lag(n)over(order by m),m) where m=i and id=v_id;
end if;
commit;  
end loop;
end proc_test;

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧