2012-01-23 19 views
2

美好的一天。我有一個非常具體的任務:重新生成數據庫中的所有序列。有400多張桌子,所以我不能用手去做。 有人可以幫我做嗎? 非常感謝..在db(oracle)中重新生成所有序列

+0

你是什麼意思「再生」?你的目標是什麼?你是否試圖將序列重置爲一些新的初始值? – Wolf

+0

你是什麼意思「再生」序列?你想放棄並重新創建序列嗎?將它們重置爲原始狀態?請更具體一些。 – Craig

+0

我需要刪除所有現有序列並重新創建。但我不確定,可能有些表沒有爭議。 – user1165282

回答

0

請注意,這是非常危險的。你可能會犯錯誤。首先運行select,以檢查您要做什麼並創建一個select表,以便您可以在需要時手動重新創建同義詞。

使用all_synonymsdba_synonyms代替user_synonyms可能會導致刪除系統同義詞如果你希望你的數據庫的工作不這樣做事後

我也建議1個測試被測代碼你創建的同義詞,以確保它確實正好你想要的。

另外我真的不明白這樣做的重點嗎?如果同義詞存在,爲什麼你需要重新生成它們?或者這是在另一臺服務器上完成的?如果是這樣,請在user_synonyms之後加@server_name並刪除drop

begin 

    for xx in (select * from user_sequences) loop 

    execute immediate 'drop sequence ' || xx.sequence_name; 
    execute immediate 'create sequence ' || xx.sequence_name 
         || ' start with ' || xx.min_value 
         || ' ends with ' || xx.max_value 
         || case when xx.cycle_flag = 'N' then ' nocycle ' 
           else ' cycle ' end 
         || case when xx.cache_size = 0 then ' nocache ' 
           else ' cache ' end || xx.cache_size 
         || case when xx.order_flag = 'N' then ' noorder ' 
           else ' order ' end 
         ; 

    end loop; 

end;