ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle特定用户下所有sequence向后移动200

oracle特定用户下所有sequence向后移动200

原创 Linux操作系统 作者:mahanso 时间:2011-01-11 13:14:51 0 删除 编辑
       昨天导入一个数据库,用户反映导过来的有sequence要小于已经导入到表中的sequence的值。原因生产数据中seq导入的时候可能在操作,导致出现一些重复的出现。为了解决这个问题,我把当前用户下所有的sequence全部向后延至200,具体操作如下:


1、创建日志表
create table MAHANSO_TEST
(
  ID       NUMBER,
  SEQUENCE VARCHAR2(100)
)


2、创建过程
DECLARE
   CURSOR c_cursor IS 
   select sequence_name from user_sequences;
   v_sequences_name user_sequences.sequence_name%type;
   
   v_sql varchar2(2000);
   v_insert_sql varchar2(2000);
   v_sequences_value number;
BEGIN
--隐含打开游标
   FOR v_sequences_name IN c_cursor LOOP
   --隐含执行一个FETCH语句
      for int in 1..100 loop 
      v_sql := 'select '||v_sequences_name.sequence_name||'.Nextval from dual';
      --v_sql := v_sequences_name;
      --dbms_output.put_line(v_sql);
      execute immediate v_sql into v_sequences_value;
      
      v_insert_sql := 'insert into mahanso_test values(:1,:2)';
      execute immediate v_insert_sql using v_sequences_value,v_sequences_name.sequence_name;
      commit;
      end loop;
   --隐含监测c_sal%NOTFOUND
     END LOOP;
--隐含关闭游标
END;

3、删除日志表
drop table MAHANSO_TEST

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12272958/viewspace-683599/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 修改linux字符集
下一篇: Alibaba DBA Team
请登录后发表评论 登录
全部评论

注册时间:2010-10-18

  • 博文量
    160
  • 访问量
    640858