oracle存储过程,高分求助!

高分请问下,oracle存储过程,高分求助!?

现oracle中有2张表,tb_group_info集团信息表,tb_group_expand_status_change集团拓展状态变更表。一个集团有status(状态)、protect_begin_time(保护期开始时间)、protect_end_time(保护期结束时间)。tb_group_expand_status_change引用tb_group_info的主键id.
现要实现如下功能:
在每个月的月初判断当前时间下集团是否过了保护期,如果过了保护期而集团的status还没发生变更(即在变更表里没这个集团的数据)则把tb_group_info的status改成“公共集团”
1、一个集团有status(状态)、protect_begin_time(保护期开始时间)、protect_end_time(保护期结束时间)、id(主键)这个是tb_group_info表的字段,tb_group_expand_status_change表有 id(主键)、group_id(集团id,外键)、status_change_time(变更时间)
2、存储过程最终结果只是改变tb_group_info表里的status的内容,这个字段原来的内容肯定不是“公共集团”,而这个存储过程要将他改成“公共集团”
3、不需要有第二个存储过程将改变保护期发生改变的集团的状态改变。谢谢~!
最新回答
龙卷风

2024-06-23 13:46:59

先给你提几点问题
1。你那几个字段分别属于哪个表里的?
2。你这个存储过程最终结果是不是只是改变tb_group_info表里的status的内容?还有,这个字段原来的内容都是什么?
3。你有这个存储过程,必须要有第二个存储过程,用来改变保护期发生改变的情况下吧?
------------------补充----------------
create or replace procedure p_update_status
is
v_id int;--这个变量的类型你按照你表里的id的类型来定义
cursor cur_id is
select id from tb_group_info where sysdate not between protect_begin_time and protect_end_time
and id not in (select group_id from tb_group_expand_status_change) order by id;

begin
open cur_id;
loop
fetch cur_id
into v_id;
exit when cur_id%notfound;
update tb_group_info set status='公共集团'
where id=v_id;
commit;

end loop;
close cur_id;

end p_update_status;

顺便说一下,你那几个日期我是按照date型来处理的,如果你表里不是以date型来存储数据的话,可以参照你自己的表的字段类型相应修改