Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: large delete
Robert Klemme wrote:
> Sybrand Bakker wrote:
> > On Tue, 20 Jun 2006 16:21:27 -0700, Akimeu <Nospam_at_Email.com> wrote:
> >
> >> hello,
> >>
> >> i have done some looking around for this, but haven't really found a
> >> solid answer. we have an sp, to which we're passing in a table name,
> >> after which we execute immediate a delete statement. is there any way
> >> of committing within this particular delete?
> >>
> >> any insights/suggestions are appreciated. thanks.
> >>
> >> this is what i was thinking of doing:
> >>
> >> loop
> >> vsql:='delete from '||vschem||'.'||vtablename||
> >> ' where '||vcol||'='''||vid||''' and rownum <= 10000';
> >> execute immediate vsql;
> >> exit when sql%rowcount = 0;
> >> commit;
> >> end loop;
> >
> > do NOT commit every n records. You will be hitting 'snapshot too old'
> > because of this.
>
>
>
In addition to what Sybrand points out, if you poke around on asktom and find where people ask about deleting millions of rows, he suggests creating another table with the records you want to keep, deleting and renaming the original. Or something like that. He also emphasizes the general superiority of doing things in sql rather than loops when possible, and especially don't commit in loops.
jg
-- @home.com is bogus. Makes me happy as a little girl! http://www.signonsandiego.com/uniontrib/20060621/news_1b21myspace.htmlReceived on Wed Jun 21 2006 - 18:34:25 CDT