runcate gl_vouchermaxno;--删除最大号表数据(不写回滚段) truncate gl_vouchernosuppl;--删除补号表数据(不写回滚段) delete from gl_vouchermaxno;--删除最大号表数据 delete from gl_vouchernosuppl;--删除补号表数据 --注:如果确定要删除数据的话,删除大量数据用truncate速度很快,但有个缺点是不写回滚段,不能回滚,慎重选择。用delete的方式删除数据,写回滚段,大量数据删除的时候速度很慢。 /*以下语句根据凭证表数据重新插入凭证最大号*/ insert into gl_vouchermaxno(select 0,max(no),a.period,a.pk_glorgbook,max(a.pk_voucher),a.pk_vouchertype,max(ts),a.yearfrom gl_voucher awhere a.dr = 0and (a.year || a.period >(select s.settledyear || s.settledperiodfrom gl_syssettled swhere s.pk_glorgbook = a.pk_glorgbook) or(not exists (select s.settledyear || s.settledperiodfrom gl_syssettled swhere s.pk_glorgbook = a.pk_glorgbookand s.settledyear is not nulland s.settledperiod is not null)))group by a.pk_glorgbook, a.year, a.period, a.pk_vouchertype); /*创建一个序列,插补号表数据时用*/ create sequence sttt start with 100000000000000; /*以下语句根据最大号表和凭证表数据查出空号,并将其插入到补号表*/ DECLAREv_orgbook VARCHAR2(20);v_year char(4);v_period char(2);v_vouchertype char(20);CURSOR v_cursor ISSELECT pk_glorgbook,year,period,pk_vouchertype FROM gl_vouchermaxno;v_row v_cursor%ROWTYPE;BEGINOPEN v_cursor;LoopFETCH v_cursor INTO v_row;v_orgbook := v_row.pk_glorgbook;v_year := v_row.year;v_period :=v_row.period;v_vouchertype := v_row.pk_vouchertype;INSERT INTO gl_vouchernosupplSELECT 2, b.NO,(SELECT pk_vouchermaxnoFROM gl_vouchermaxnoWHERE pk_glorgbook = v_orgbookAND YEAR = v_yearAND period = v_periodAND pk_vouchertype = v_vouchertype),substr(b.pk_glorgbook,16,20) || sttt.NEXTVAL, tsFROM (SELECT a.n AS NO, ts, voucher.pk_voucher,a.pk_glorgbook, nosuppl.pk_vouchermaxnoFROM (SELECT ROWNUM AS n, ts AS ts, v_orgbook as pk_glorgbookFROM gl_voucherWHERE ROWNUM <=(SELECT maxnoFROM gl_vouchermaxnoWHERE pk_glorgbook = v_orgbookAND YEAR = v_yearAND period = v_periodAND pk_vouchertype = v_vouchertype) and gl_voucher.dr=0) aLEFT OUTER JOIN(SELECT pk_voucher, NOFROM gl_voucherWHERE gl_voucher.pk_glorgbook = v_orgbookAND gl_voucher.YEAR = v_yearAND gl_voucher.period = v_periodAND gl_voucher.pk_vouchertype = v_vouchertypeAND gl_voucher.dr = 0) voucher ON voucher.NO = a.nLEFT OUTER JOIN(SELECT NO, pk_vouchermaxnoFROM gl_vouchernosupplWHERE gl_vouchernosuppl.pk_vouchermaxno =(SELECT pk_vouchermaxnoFROM gl_vouchermaxnoWHERE pk_glorgbook = v_orgbookAND YEAR = v_yearAND period = v_periodAND pk_vouchertype = v_vouchertype)) nosupplON a.n = nosuppl.NO) bWHERE b.pk_voucher IS NULL AND pk_vouchermaxno IS NULL;EXIT WHEN v_cursor%NOTFOUND;end Loop;close v_cursor;end;/*删除序列*/drop sequence sttt
如何做让公众都知道的网站/金蝶进销存免费版
转载于:https://www.cnblogs.com/sumsen/archive/2012/05/30/2525365.html