美好的一天。我有一个非常具体的任务:重新生成数据库中的所有序列。里面有400多张桌子,所以我不能用手做。 有人可以帮我做吗? 非常感谢..
答案 0 :(得分:0)
请注意这是非常危险的。你很可能犯错误。首先运行select以检查您要执行的操作,并创建一个select表,以便您可以在以后手动重新创建同义词。
使用all_synonyms
或dba_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;