2012-01-23 12 views
2

良い日。私は非常に具体的なタスクを持っています:データベース内のすべてのシーケンスを再生成します。そこに400以上のテーブルがあるので、私は手でそれをすることはできません。 誰かが私にそれを手伝ってもらえますか? ありがとうございます..db(oracle)内のすべてのシーケンスを再生成

+0

「再生する」とはどういう意味ですか?あなたの目標は何ですか?シーケンスを新しい開始値にリセットしようとしていますか? – Wolf

+0

シーケンスを「再生する」とはどういう意味ですか?シーケンスを削除して再作成したいですか?元の状態に戻しますか?より具体的にしてください。 – Craig

+0

既存のシーケンスをすべて削除して、もう一度作成する必要があります。しかし、私は確信していない、いくつかのテーブルがsequncesしていない可能性があります。 – user1165282

答えて

0

非常に危険ですのでご注意ください。あなたは間違いをよくするかもしれません。最初に選択を実行して、何をしようとしているのかを確認し、後で必要に応じて手動で同義語を再作成できるように選択表を作成します。あなたは、データベースが仕事をしたい場合ははこのをしないシステムの同義語をドロップをもたらすことができるall_synonymsまたはその代わりuser_synonymsdba_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; 
関連する問題