割接典例2(1)

需求2:对多个表进行记录除重,重复记录定义:某几个字段(2个、3个、4个字段)一样就定义其为重复记录

     疑问难点1:对于各个表的重复记录定义不统一;
   
     疑问难点2:对于大表如何能快速定位到重复记录;

详细脚本:
--创建临时表
create table df_tmp_forrowid(row_id varchar2(500)) tablespace TBS_MREAD_DAT;
--创建工具存储过程
create or replace procedure pro_del_samecomment
(
   actionsql in varchar2
)
/*
* 删除重复记录共用存储过程
* @param actionsql 执行的sql
* @author xKF24575
* @version [版本号, May 18, 2011]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
is
    TYPE type_recordid IS TABLE OF df_tmp_forrowid.row_id%type INDEX BY BINARY_INTEGER;
    v_sql            varchar2(1024);--执行sql
    str_rowid        type_recordid;
    v_error          varchar2(2048);--出错日志
    n_temp           number(20):=0;
    n_count          number(20):=0;

begin

  select row_id bulk collect
        into str_rowid
        from df_tmp_forrowid;
  
    n_count := str_rowid.count;
    if n_count > 0 then
      for i in 1..n_count loop
        v_sql := actionsql || ' where rowid=:a';
        execute immediate v_sql using str_rowid(i);
        n_temp := n_temp + 1;
        if n_temp >= 1000 then
          commit;
          n_temp :=0;
        end if;
      end loop;
   end if;
   commit;
exception
   when others then
   v_error := sqlcode || ' - ' || sqlerrm;
   prc_iread_sys_writelog (2,4,'pro_del_samecomment',v_error,'');

end pro_del_samecomment;
/

你可能感兴趣的:(sql,脚本)