ORACLE 的 dbms_redefinition.copy_table_dependents 复制索引/触发器/约束并将它们重命名为
TMP$$_[original object name]
是否可以更改字符串 "TMP$$_" ,以便 copy_table_dependents 使用不同的前缀?我知道我可以在之后重命名对象,但我想知道是否可以更改前缀。
ORACLE 的 dbms_redefinition.copy_table_dependents 复制索引/触发器/约束并将它们重命名为
TMP$$_[original object name]
是否可以更改字符串 "TMP$$_" ,以便 copy_table_dependents 使用不同的前缀?我知道我可以在之后重命名对象,但我想知道是否可以更改前缀。
不,您不能更改 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;
/
您可以通过查询USER_DEPENDENCIES看到;对象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
因为它们只是临时对象,并且名称保证是唯一的;我认为维护标准名称没有任何特殊问题。