如何将序列移动到新架构?

时间:2017-07-31 21:56:29

标签: sql oracle ddl

我想将一个序列移动到一个新的模式,保留当前的nextval值,这样当人们开始使用它时,序列中就没有间隙,移动的grant和create语句是什么?

注意:我没有SYS或其他管理员用户角色和密码,我只能访问旧模式和新模式。

2 个答案:

答案 0 :(得分:2)

最简单的方法是在一个模式中获取序列的DDL,替换模式名称并在其他模式上创建它。

--prepare sample data
CREATE SEQUENCE my_seq
 START WITH     1000
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

--increase sequence number for test
select my_seq.nextval from dual;
select my_seq.nextval from dual;

--copy the sequence
declare 
  sqltext varchar(512);
  oldschema varchar(64) := 'my_test_schema1';
  newschema varchar(64) := 'my_test_new_schema'; 
begin
  select dbms_metadata.get_ddl('SEQUENCE',upper('my_seq'),upper(oldschema)) into sqltext from dual;
  sqltext := replace(sqltext, '"'||upper(oldschema)||'"', '"'||upper(newschema)||'"');  
  execute immediate sqltext;
end;


--permissions
create any sequence to ...

答案 1 :(得分:0)

select * from user_sequences where sequence_name = 'sequence_name'

OR

select * from all_sequences where sequence_owner = 'OLD_SCHEMA'  and sequence_name = 'sequence_name'

您可以从那里获取最后一个数字以及其他参数以及下面的create语句。

CREATE SEQUENCE #SCHEMA_NAME#.#SEQUENCE_NAME#
  START WITH 21
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
/

如果你有像TOAD这样的第三方工具,你可以

desc sequence_name

它将为您提供旧架构中的脚本以在新架构中创建。