知识大全 分别删除数据表记录的方法

Posted

篇首语:其实最美好的日子就是,我对你闹,你对我笑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 分别删除数据表记录的方法相关的知识,希望对你有一定的参考价值。

  很多情况下我们需要分别删除数据表的一些记录 分批来提交以此来减少对于Undo的使用 下面我们提供一个简单的存储过程来实现此逻辑

  

  

  SQL> create table test as select * from dba_objects;

  

  Table created

  

  SQL> create or replace procedure deleteTab

   /**

   ** Usage: run the script to create the proc deleteTab

   ** in SQL*PLUS type exec deleteTab( Foo ID>= );

   ** to delete the records in the table Foo mit per records

   ** Condition with default value = and default Commit batch is

   **/

   (

   p_TableName in varchar The TableName which you want to delete from

   p_Condition in varchar default = Delete condition such as id>=

   p_Count in varchar default Commit after delete How many records

   )

   as

   pragma autonomous_transaction;

   n_delete number:= ;

   begin

   while = loop

   EXECUTE IMMEDIATE

   delete from ||p_TableName|| where ||p_Condition|| and rownum <= :rn

   USING p_Count;

   if SQL%NOTFOUND then

   exit;

   else

   n_delete:=n_delete + SQL%ROWCOUNT;

   end if;

   mit;

   end loop;

   mit;

   DBMS_OUTPUT PUT_LINE( Finished! );

   DBMS_OUTPUT PUT_LINE( Totally ||to_char(n_delete)|| records deleted! );

   end;

   /

  

  Procedure created

  

  

  SQL> insert into test select * from dba_objects;

  

   rows created

  

  SQL> /

  

   rows created

  

  SQL> /

  

   rows created

  

  SQL> mit;

  

  Commit plete

  

  SQL> exec deleteTab( TEST object_id > )

  Finished!

  Totally records deleted!

  

  PL/SQL procedure successfully pleted

  

  

  

  注释 在此实例中修正了一下 增加了 个缺省值 以下是具体过程:

  

  

  create or replace procedure deleteTab

  (

  p_TableName in varchar

   The TableName which you want to delete from

  p_Condition in varchar default =

   Delete condition such as id>=

  p_Count in varchar default

   Commit after delete How many records

  )

  as

  pragma autonomous_transaction;

  n_delete number:= ;

  begin

  while = loop

  EXECUTE IMMEDIATE

   delete from ||p_TableName||

  where ||p_Condition|| and rownum <= :rn

  USING p_Count;

  if SQL%NOTFOUND then

  exit;

  else

  n_delete:=n_delete + SQL%ROWCOUNT;

  end if;

  mit;

  end loop;

  mit;

  DBMS_OUTPUT PUT_LINE( Finished! );

  DBMS_OUTPUT PUT_LINE( Totally ||to_char(n_delete)|| records deleted! );

  

  

  

cha138/Article/program/Oracle/201311/18562

相关参考