복붙노트

[SQL] 오라클 테이블의 재 순서는 열

SQL

오라클 테이블의 재 순서는 열

나는 50 개 이상의 열이있는 테이블을 가지고 있고 나는 처음 두 열의 순서를 바꿀 필요가있다. 이 사용하여 Oracle을 달성하는 가장 좋은 방법은 무엇입니까? 테이블 이름 ORDERDETAILS하고 그대로, 첫 번째 두 열 및 ITEM_ID ORDER_ID가 가정하자. 이름 변경이 완료되면, 테이블 이름은 여전히 ​​ORDERDETAILS해야하지만, 처음 두 열은 ORDER_ID 및 ITEM_ID 될 것입니다. FWIW, 열 유형과 열의 나머지 순서는 irelevent입니다.

내가 틀렸다,하지만 일반적인 단계를 생각하면 저를 수정 :

나는 오라클 그래서 아마도 내가 단계 또는 두 누락에 약간의 경험이 있습니다.

기본 키는 오라클의 인덱스를 의미합니까? 기본 키 또한 인덱스를 삭제 삭제합니까?

SQL 예는 많이 감사합니다.

편집 : 그 대신 도움을 제공의 완료해야하는 이유있는 질문들에 대한 유엔 진심으로 감사합니다. 그것을 할 필요가 이유에 대한 귀하의 질문에 대답하려면 : 나는 이런 식으로해야하고, 열 순서가 중요합니까 말한다 다른 사람의 주문을 다음과 같은거야. 내 생각은 /이에 대한 의견은 의미도 없습니다 있습니다.

해결법

  1. ==============================

    1.패키지 DBMS_REDEFINITION 봐. 이 새로운 순서로 테이블을 다시 작성합니다. 그것은 온라인 테이블 수행 할 수 있습니다.

    패키지 DBMS_REDEFINITION 봐. 이 새로운 순서로 테이블을 다시 작성합니다. 그것은 온라인 테이블 수행 할 수 있습니다.

    필 브라운이 언급 한 바와 같이,이 일을하기 전에 신중하게 생각합니다. 그러나 열에 대한 행을 스캔 및 업데이트 데이터를 이동시키는 오버 헤드가된다. 열 순서는 (특별한 순서없이) 내가 사용 규칙 :

    이 규칙의 갈등과 모든 최신 버전의 성능 테스트되지 않았습니다. 대부분은 실제로 테스트되었습니다,하지만 난 그 결과를 문서화하지 않았다. 배치 옵션은 세 가지 상충되는 목표 중 하나 대상 : 쉽게 열 배치를 이해하기 위해; 빠른 데이터 검색; 업데이트에 대한 최소한의 데이터 이동.

  2. ==============================

    2.오라클 (12c)의 출시 된 이후 논리적으로 다시 정렬 열 지금 쉽습니다.

    오라클 (12c)의 출시 된 이후 논리적으로 다시 정렬 열 지금 쉽습니다.

    오라클 12c는 열이 보이지 않는 만들기위한 지원을 추가하고 그 기능은 논리적으로 열을 다시 정렬 할 수 있습니다.

    눈에 보이지 않는 컬럼에 대한 문서에서 인용 :

    테이블을 생성합니다 :

    CREATE TABLE t (
        a INT,
        b INT,
        d INT,
        e INT
    );
    

    열을 추가 :

    ALTER TABLE t ADD (c INT);
    

    중간에 열을 이동 :

    ALTER TABLE t MODIFY (d INVISIBLE, e INVISIBLE);
    ALTER TABLE t MODIFY (d VISIBLE, e VISIBLE);
    

    t을 DESCRIBE;

    Name
    ----
    A
    B
    C
    D
    E
    

    나는 오라클 12C의 새로운 기능에 톰 카이트의 글에서 이것에 대해 배웠습니다.

  3. ==============================

    3.그것은 오라클은이를 허용하지 않습니다 슬픈, 나는 개발자가 모든 시간을이 작업을 수행하도록 요청받을 ..

    그것은 오라클은이를 허용하지 않습니다 슬픈, 나는 개발자가 모든 시간을이 작업을 수행하도록 요청받을 ..

    여기에 약간 위험한 다소 신속하고 더러운 방법입니다 :

    그리고 테이블을 만들고 다음 번에, 미래의 요구 사항을 고려하시기 바랍니다! ;)

  4. ==============================

    4.나는 조나스에서 위의 솔루션을 따라 내가 두 번째 열을 추가하는 데 필요한 때까지 잘 작동했다. 내가 발견 한 것은 다시 볼 열을 만들 때 오라클은 반드시 문에 나열된 순서대로 표시 설정하지 않습니다.

    나는 조나스에서 위의 솔루션을 따라 내가 두 번째 열을 추가하는 데 필요한 때까지 잘 작동했다. 내가 발견 한 것은 다시 볼 열을 만들 때 오라클은 반드시 문에 나열된 순서대로 표시 설정하지 않습니다.

    이상이 다음과 조나스의 모범을 보여합니다. 그는 가리 켰을 때, 단계가 완료되면, 테이블은 당신이 기대하는 순서입니다. 아래와 같이 다른 열을 추가 할 때 상황은 분해 :

    예 (조나스에서 계속 ') :

    열 C. 전에 삽입되는 다른 열 추가

    ALTER TABLE t ADD (b2 INT);
    

    열 C. 전에 새로 추가 된 B2 열을 이동하려면 위의 입증 된 기술을 사용하여

    ALTER TABLE t MODIFY (c INVISIBLE, d INVISIBLE, e INVISIBLE);
    ALTER TABLE t MODIFY (c VISIBLE, d VISIBLE, e VISIBLE);
    

    t을 DESCRIBE;

    Name
    ----
    A
    B
    B2
    D
    E
    C
    

    열 C 위와 같이 끝으로 이동하고있다. 그것은 ALTER TABLE 문 위의 차 D의 열 처리 된 것 같다, E, C가 아닌 (아마도 물리적 나타난 순서대로) 문에 지정된 순서이다. 그것을 원하는 순서에 의해 열을 표시 할 필요가 원하는 곳에 열이 배치되도록.

    ALTER TABLE t MODIFY (c INVISIBLE, d INVISIBLE, e INVISIBLE);
    ALTER TABLE t MODIFY c VISIBLE;
    ALTER TABLE t MODIFY d VISIBLE;
    ALTER TABLE t MODIFY e VISIBLE;
    

    t을 DESCRIBE;

    Name
    ----
    A
    B
    B2
    C
    D
    E
    
  5. ==============================

    5.컬럼의 위치를 ​​변경에 당신의 노력에 대한보기를 사용합니다 : VIEW CORRECTED_POSITION을 CREATE 같이 SELECT co1_1, col_3이, col_2에는 UNORDERDED_POSITION FROM 도움이 될 것입니다.

    컬럼의 위치를 ​​변경에 당신의 노력에 대한보기를 사용합니다 : VIEW CORRECTED_POSITION을 CREATE 같이 SELECT co1_1, col_3이, col_2에는 UNORDERDED_POSITION FROM 도움이 될 것입니다.

    이 [TABLE_NAME]에서 SELECT *를 사용하는 경우 일부 보고서는 생산 얻을 수 있도록이 요청이 만들어집니다. 또는, 일부 사업은 다시 끝에서 가독성 위해 정보를 배치하는 계층 접근 방식을 가지고있다.

    감사 딜립

  6. from https://stackoverflow.com/questions/4939735/re-order-columns-of-table-in-oracle by cc-by-sa and MIT license