想写一个存储过程,遇到了很多问题这个存储过程的主要功能是想实现自动删除数据库中的一些临时表的功能,自动删除有一个条件,就是认为过期的表才删除。现在数据库中有M_Main和M_SysPara(保存两个常量)两个表,
还有很多名字诸如T_Temp_0001,T_Temp_0002,T_Temp_XXXX.....的临时表,(XXXX代表M_Main表中的main_cd,每个main_cd对应一个自己的临时表,比如main_cd为0001对应临时表T_Temp_0001)M_Main和M_SysPara表的大致结构如下M_Main表
字段
main_cd VARCHAR2(10)
last_exe_date VARCHAR2(8)M_SysPara表
字段
proc_date VARCHAR2(8)
del_days NUMBER(5)
认定临时表过期的方法:
在M_Main表中搜索
满足条件
M_Main.last_exe_date ≦ M_SysPara.proc_date + M_SysPara.del_days的临时表就自动删除。例如
上次运行日期last_exe_date为20060801,
常量M_SysPara.proc_date为20060701,
常量M_SysPara.del_days为40天,
就认为从20060701开始加40天,比如说是20060810,那么2006年8月10号之前运行的main_cd所对应的临时表都删除。小弟是新手,第一次写oracle存储过程,查阅一些资料,感觉似乎要调用dbms_scheduler.create_job,可以在每天固定的时间来做这个删除临时表的工作,但不知如何下手,请各位高手给予指点。
还有很多名字诸如T_Temp_0001,T_Temp_0002,T_Temp_XXXX.....的临时表,(XXXX代表M_Main表中的main_cd,每个main_cd对应一个自己的临时表,比如main_cd为0001对应临时表T_Temp_0001)M_Main和M_SysPara表的大致结构如下M_Main表
字段
main_cd VARCHAR2(10)
last_exe_date VARCHAR2(8)M_SysPara表
字段
proc_date VARCHAR2(8)
del_days NUMBER(5)
认定临时表过期的方法:
在M_Main表中搜索
满足条件
M_Main.last_exe_date ≦ M_SysPara.proc_date + M_SysPara.del_days的临时表就自动删除。例如
上次运行日期last_exe_date为20060801,
常量M_SysPara.proc_date为20060701,
常量M_SysPara.del_days为40天,
就认为从20060701开始加40天,比如说是20060810,那么2006年8月10号之前运行的main_cd所对应的临时表都删除。小弟是新手,第一次写oracle存储过程,查阅一些资料,感觉似乎要调用dbms_scheduler.create_job,可以在每天固定的时间来做这个删除临时表的工作,但不知如何下手,请各位高手给予指点。
和表中记录的脚本贴出来
别人也好方便些你是不会写存储过程,还是不会写sql语句 ?
我没写过存储过程,
M_Main.last_exe_date 和 M_SysPara.proc_date 都是字符串。M_SysPara.del_days是数字。建表的脚本我马上贴出来
create table M_SYSPARA
(
PROC_DATE VARCHAR2(8),
DEL_DAYS NUMBER(5)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
create table M_MAIN
(
MAIN_CD VARCHAR2(10) not null,
LAST_TIME_EXE_DATE VARCHAR2(8)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table M_MAIN
add constraint M_MAIN_PK_MAIN_CD primary key (MAIN_CD)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
values ('20060701', 40);insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('0001', '20060417');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('10001', '20060509');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('789123', '20060417');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('BBB', null);
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('K1101', '20060627');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('K1102', '20060627');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('K1103', '20051219');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('K1104', '20060417');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('M00001', '20060113');
insert into M_MAIN (MAIN_CD, LAST_TIME_EXE_DATE)
values ('MED002', '20060417');