在数据库(oracle)中重新生成所有序列

在数据库(oracle)中重新生成所有序列,oracle,sequence,Oracle,Sequence,你好。我有一个非常具体的任务:重新生成数据库中的所有序列。里面有400多张桌子,所以我不能用手做。 有人能帮我做吗? 非常感谢。请注意这是非常危险的。你很可能会犯错误。运行select first以检查您将要执行的操作,并创建select的表,以便在以后需要时手动重新创建同义词 使用all\u同义词或dba\u同义词而不是user\u同义词可能会导致删除系统同义词。如果希望数据库以后工作,请不要这样做 我还建议在您创建的1个测试同义词上测试代码,以确保它完全符合您的要求 而且我真的不明白这样做有

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

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

使用
all\u同义词
dba\u同义词
而不是
user\u同义词
可能会导致删除系统同义词。如果希望数据库以后工作,请不要这样做

我还建议在您创建的1个测试同义词上测试代码,以确保它完全符合您的要求

而且我真的不明白这样做有什么意义?如果同义词存在,为什么需要重新生成它们?或者这是在另一台服务器上完成的?如果是这样,请在
用户同义词之后添加
@server\u name
,并删除
下拉列表

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;

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

使用
all\u同义词
dba\u同义词
而不是
user\u同义词
可能会导致删除系统同义词。如果希望数据库以后工作,请不要这样做

我还建议在您创建的1个测试同义词上测试代码,以确保它完全符合您的要求

而且我真的不明白这样做有什么意义?如果同义词存在,为什么需要重新生成它们?或者这是在另一台服务器上完成的?如果是这样,请在
用户同义词之后添加
@server\u name
,并删除
下拉列表

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;

“再生”是什么意思?你的目标是什么?您是否试图将序列重置为新的起始值?什么是“重新生成”序列?你想删除并重新创建序列吗?将它们重置回原始状态?请更具体一点。我需要删除所有现有序列并重新创建。但我不确定,可能有些表没有sequence。表没有序列。序列是独立的对象。一个序列可以为模式中的每个表提供ID(尽管这是次优的)。另外,您希望将什么设置为重新创建序列的起始值?和。如果序列已用于生成表中作为数据存在的序列,则不能删除它们。你将打破限制。你说的“再生”是什么意思?你的目标是什么?您是否试图将序列重置为新的起始值?什么是“重新生成”序列?你想删除并重新创建序列吗?将它们重置回原始状态?请更具体一点。我需要删除所有现有序列并重新创建。但我不确定,可能有些表没有sequence。表没有序列。序列是独立的对象。一个序列可以为模式中的每个表提供ID(尽管这是次优的)。另外,您希望将什么设置为重新创建序列的起始值?和。如果序列已用于生成表中作为数据存在的序列,则不能删除它们。您将打破约束。