CREATE OR REPLACE PROCEDURE XuanWu
IS
v_date VARCHAR2;
v_errcode VARCHAR2;
v_errmsg varchar2;
v_date1 VARCHAR2;
v_date2 VARCHAR2;
v_str VARCHAR2;
v_todate VARCHAR2;
v_row INTEGER;
v_sige INTEGER;
v_count INTEGER;
v_counts INTEGER;
BEGIN
--比较执行时间
v_date1 := '05:00:00';
--分页的每次条数
v_sige := 10000;
--分页所记的页数
v_counts := 0;
--上个月第一天
v_todate := select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-mm-dd')||' 00:00:00' from dual;
--得到现在的时间
v_date :=to_char(sysdate,'YYYY-MM-DD HH24:MI:SS');
--得到时间格式为09:31:28
v_date2 :=substr('v_date',-8,8);
dbms_ouput.put_line(v_date2);
--得到要备份的数据的总数
select COUNT(*) INTO v_tem from morecord WHERE MOTIME < (select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-mm-dd')||' 00:00:00' from dual);
--得到要备份的次数
v_count := v_tem/v_sige;
--循环做备份v_count次备份事件
for v_counts in v_count LOOP
--如果时间在5点以前就做备份数据事件
if(v_date2 < v_date1) THEN
--插入到备份表BAK_MORECORD所查询到除保留数据外所有数据
--SELECT * FROM (SELECT rownum no FROM MORECORD where rownum<=(v_counts+1)*v_sige)where no>=v_counts
*v_sige语句为取得的分页的值
--分页的值的如 第一次取得值为0--10000;第二次的值为10000--20000
INSERT INTO BAK_MORECORD SELECT * FROM morecord WHERE SELECT * FROM (SELECT rownum no FROM MORECORD where rownum<=(v_counts+1)*v_sige)where no>=v_counts*v_sige AND MOTIME < v_todate; -
-删除morecord表保留数据
DELETE FROM morecord WHERE MOTIME < v_todate;
COMMIT;
v_counts := v_counts+1;
--把进行备份时发生的错误记录到errorlog错误日志表中
exception
when others then
rollback;
v_errcode := SQLCODE;
v_errmsg := SQLERRM;
insert into errorlog values(seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);
COMMIT;
els THEN
exit;
end IF;
end loop;
END;
第一个红色部分:修改成
select COUNT(*) INTO v_tem from morecord WHERE MOTIME < (select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-mm-dd')||' 00:00:00' from dual);
第二个红色部分:sql有问题,把你想要sql正确写下