2013-07-06 3 views
3

DBMS_REDEFINITION 패키지를 사용하여 테이블의 일부 열을 재정렬해야합니다. 어떻게Oracle : DBMS_REDEFINITION 패키지를 사용하여 열을 재정렬하는 방법은 무엇입니까?

재정렬 테이블은 첫 번째 열로 X를 가지고
create table a (z number, x number); 

등과 같은 테이블에 대해이 작업을 수행합니까?

(컨텍스트 : 일부 기존 테이블에 일부 메타 데이터 열을 추가하는 일부 유틸리티를 작성 중이며 메타 데이터 열이 앞에 있으면 유용 할 것이므로 끌어 올릴 때 편리하게 볼 수 있습니다. SQL 개발자 또는 다른 테이블 탐색 도구. 논리적 인 처리 열 순서는 중요하지 않지만 쉽게 사용할 수있는 도구를 사용하여 테이블을 쉽게 이해할 수 있다는 주장을 알고 있습니다.)

+0

Dup는을 : http://stackoverflow.com/questions/1824654/oracle-move-column-to-the-first-position –

+1

@VaibhavDesai, dup이 아니라 DBMS_REDEFINITION 패키지에 대한 언급이 없습니다. –

+0

필요에 따라 정렬 된 열이있는 뷰를 만드는 방법은 어떻습니까? – OldProgrammer

답변

1

사용법이 설명서에 설명되어 있으므로 궁금한 점이 무엇인지 잘 모릅니다.

하지만 DBMS_REDEFINITION 사용하여 재정의 할 수 있도록 특별한 플래그를 사용할 필요가 테이블에 기본 키가하지 않는 것 (또는 당신이 언급하는 것을 잊었다)과 같이

create table a_ (x number, z number); 

begin 
    dbms_redefinition.start_redef_table(
    uname => user, 
    orig_table => 'A', 
    int_table => 'A_', 
    options_flag => dbms_redefinition.cons_use_rowid); 

    dbms_redefinition.finish_redef_table(
    uname => user, 
    orig_table => 'A', 
    int_table => 'A_'); 
end; 
/

drop table a_; 
+0

Lol, 내가 가지고 있지 않은이 깨끗하고 정확한 예를 알아낼만큼 똑똑하다면 Stack Overflow! 'start_redef_table'가'col_mapping' 매개 변수를 필요로하지 않는 경우입니까? –

+0

@ MarkHarrison : 실수가 아닌 경우 열의 이름을 바꾸는 경우에만 열 매핑이 필요합니다. –

+0

테스트를 거쳐 완벽하게 작동합니다. 패키지에 CREATE ANY ... grant가 필요하기 때문에 이것을 SYS로 사용했습니다. –

0

죄송합니다. 귀하의 질문에 아직 코멘트를하지 않으려면
그래서 이름 바꾸기 + 선택을 만들어야하나요?

alter table a rename to a_01; 
create a as select x,z from a_01; 

???

+0

DMBS_REDEFINITION의 주된 매력은 (a) 온라인 작업, (b) 자동으로 인덱스, 트리거 등을 처리하는 것입니다. –