在db(oracle)中重新生成所有序列

时间:2012-01-23 15:45:25

标签: oracle sequence

美好的一天。我有一个非常具体的任务:重新生成数据库中的所有序列。里面有400多张桌子,所以我不能用手做。 有人可以帮我做吗? 非常感谢..

1 个答案:

答案 0 :(得分:0)

请注意这是非常危险的。你很可能犯错误。首先运行select以检查您要执行的操作,并创建一个select表,以便您可以在以后手动重新创建同义词。

使用all_synonymsdba_synonyms 代替 user_synonyms可能会导致丢弃系统同义词不执行此操作您希望数据库在之后工作

我还建议您在您创建的1个测试同义词上测试代码,以确保它完全您想要的内容。

另外,我真的没有看到这样做的意义吗?如果有同义词,你为什么需要重新生成它们?或者这是在另一台服务器上完成的?如果是,请在@server_name之后添加user_synonyms并删除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;