ORACLE的dbms_redefinition.copy_table_dependents复制索引/触发器/约束,并将它们重命名为
TMP$$_[original object name]是否可以更改字符串"TMP$$_“,以便copy_table_dependents使用不同的前缀?我知道事后我可以重命名对象,但我不知道是否可以更改前缀。
发布于 2014-06-14 16:52:19
不,你不能改变object_name。
我不认为这很重要,因为一旦运行TMP$$,DBMS_REDEFINITION.FINISH_REDEF_TABLE对象就会被移除。
如果您假设以下环境
create table test_redef_source ( id number, tstamp date, primary key (id) );
create or replace trigger tr_test_redef_sources
before insert on test_redef_source
for each row
begin
:new.tstamp := sysdate;
end;
/
create table test_redef_int as
select * from test_redef_source;
declare
l_errors number;
begin
dbms_redefinition.start_redef_table (
uname => user
, orig_table => 'TEST_REDEF_SOURCE'
, int_table => 'TEST_REDEF_INT'
);
dbms_redefinition.copy_table_dependents (
uname => user
, orig_table => 'TEST_REDEF_SOURCE'
, int_table => 'TEST_REDEF_INT'
, copy_indexes => 1
, num_errors => l_errors
);
end;
/通过查询相依性;可以看到TMP$$对象依赖于临时表:
select name, type, referenced_name
from user_dependencies
where referenced_name like '%TEST_REDEF%'
;
NAME TYPE REFERENCED_NAME
------------------------------ ------------------ --------------------
TMP$$_TR_TEST_REDEF_SOURCES0 TRIGGER TEST_REDEF_INT
TR_TEST_REDEF_SOURCES TRIGGER TEST_REDEF_SOURCE完成重新定义后,这些对象将被移除:
begin
dbms_redefinition.finish_redef_table (
uname => user
, orig_table => 'TEST_REDEF_SOURCE'
, int_table => 'TEST_REDEF_INT'
);
end;
/
PL/SQL procedure successfully completed.
select name, type, referenced_name
from user_dependencies
where referenced_name like '%TEST_REDEF%'
;
NAME TYPE REFERENCED_NAME
------------------------------ ------------------ --------------------
TR_TEST_REDEF_SOURCES TRIGGER TEST_REDEF_SOURCE因为它们只是临时对象,而且名称保证是唯一的;我不认为维护标准名称有任何特殊的问题。
https://stackoverflow.com/questions/24219921
复制相似问题