我想将一个序列移动到一个新的模式,保留当前的nextval值,这样当人们开始使用它时,序列中就没有间隙,移动的grant和create语句是什么?
注意:我没有SYS或其他管理员用户角色和密码,我只能访问旧模式和新模式。
答案 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
它将为您提供旧架构中的脚本以在新架构中创建。