这种情况是这样的。
我创建了具有两个索引的分区表A
。然后从原始表B
中插入记录,该表也有两个索引。表B
有1.33亿行。
现在,我想将旧表B重命名为“ _old”(包括其索引), 最后,将新的分区表重命名回原始表,包括其索引。
我知道我可以简单地编写Alter语句来完成上述任务,但是这样做的目的是使其可重新运行!我该怎么办?
DECLARE
PROCEDURE check_indexes
(
table_owner_in IN VARCHAR2
,table_name_in IN VARCHAR2
,index_name_in IN VARCHAR2
,new_index_name_in VARCHAR2
) IS
count_indexes NUMBER;
BEGIN
SELECT COUNT(*)
INTO count_indexes
FROM user_indexes
WHERE table_owner = table_owner_in
AND table_name = table_name_in
AND index_name = index_name_in;
IF count_indexes > 0
THEN
dbms_output.put_line('ALTER INDEX ' || index_name_in ||
' RENAME TO ' || new_index_name_in);
END IF;
END;
BEGIN
check_indexes(table_owner_in => 'UTILS_OWNER'
,table_name_in => 'OP_LOG_OLD'
,index_name_in => 'OL_MODULE_NAME_I'
,new_index_name_in => 'OL_MODULE_NAME_I_OLD');
check_indexes(table_owner_in => 'UTILS_OWNER'
,table_name_in => 'OP_LOG_OLD'
,index_name_in => 'OL_PK'
,new_index_name_in => 'OL_PK_OLD');
check_indexes(table_owner_in => 'UTILS_OWNER'
,table_name_in => 'OP_LOG'
,index_name_in => 'OL_MODULE_NAME_I_NEW'
,new_index_name_in => 'OL_MODULE_NAME_I');
check_indexes(table_owner_in => 'UTILS_OWNER'
,table_name_in => 'OP_LOG'
,index_name_in => 'OL_PK_NEW'
,new_index_name_in => 'OL_PK');
END;