如何将序列移动到新模式?
How to move a sequence to a new schema?
我想将一个序列移动到一个保留当前 nextval 值的新模式,这样当人们开始使用它时,序列中就不会出现间隙,移动的 grant 和 create 语句是什么?
注意:我没有 SYS 或其他管理员用户角色和密码,我只能访问旧模式和新模式。
最简单的方法是为一个模式中的序列获取 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 ...
select * from user_sequences where sequence_name = 'sequence_name'
或
select * from all_sequences where sequence_owner = 'OLD_SCHEMA' and sequence_name = 'sequence_name'
您可以从那里获取最后一个数字和其他参数以及下面的创建语句。
CREATE SEQUENCE #SCHEMA_NAME#.#SEQUENCE_NAME#
START WITH 21
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER
/
或者如果您有像 TOAD 这样的第三方工具,您可以
desc sequence_name
它会为您提供旧模式中的脚本以在新模式中创建。
我想将一个序列移动到一个保留当前 nextval 值的新模式,这样当人们开始使用它时,序列中就不会出现间隙,移动的 grant 和 create 语句是什么?
注意:我没有 SYS 或其他管理员用户角色和密码,我只能访问旧模式和新模式。
最简单的方法是为一个模式中的序列获取 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 ...
select * from user_sequences where sequence_name = 'sequence_name'
或
select * from all_sequences where sequence_owner = 'OLD_SCHEMA' and sequence_name = 'sequence_name'
您可以从那里获取最后一个数字和其他参数以及下面的创建语句。
CREATE SEQUENCE #SCHEMA_NAME#.#SEQUENCE_NAME#
START WITH 21
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER
/
或者如果您有像 TOAD 这样的第三方工具,您可以
desc sequence_name
它会为您提供旧模式中的脚本以在新模式中创建。