oracle特定使用者下所有sequence向後移動200

mahanso發表於2011-01-11
       昨天匯入一個資料庫,使用者反映導過來的有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部落格 ” ,連結:http://blog.itpub.net/12272958/viewspace-683599/,如需轉載,請註明出處,否則將追究法律責任。

相關文章