2012-08-30 2 views

답변

3

간단한 대답은 할 수 없다는 것입니다. 열은 항상 끝에 추가됩니다. 그러나 쿼리의 열과 DML에 항상 명시 적으로 열을 나열해야하므로 테이블의 열 순서는 신경 쓰지 않아야합니다. 그리고 항상 인터페이스 레이어 (예 :보기)가 있어야합니다. 여기서 순서가 중요한 경우 적절한 위치에 새 열을 추가 할 수 있습니다. 당신이 정말로 결정하는 경우

, 당신은, 새로운 열 순서로 새 테이블을 만들고 새 테이블로 데이터를 이동, 이전 테이블을 삭제하고 새 테이블의 이름을 바꿀 수 있습니다. 테이블에서 인덱스, 제한 조건 또는 트리거를 다시 작성해야합니다. 나는 그것이 명시 판의 옵션인지 확실하지 않다

ALTER TABLE tb 
    ADD(M NUMBER); 

CREATE TABLE tb_new 
AS 
SELECT a, b, m, c 
    FROM tb; 

DROP TABLE tb; 

ALTER TABLE tb_new 
    RENAME TO tb; 

같은 뭔가 (나는 그것을 의심하는 경향이 있지만 검증하기 편리한 XE 데이터베이스가 없습니다)하지만 당신은 또한 잠재적으로 DBMS_REDEFINITION package을 사용할 수 있습니다 그 예에서 바바라가 보여 주듯이. 오라클은 기본적으로 위에서 수행 한 것과 동일한 작업을 수행하지만 애플리케이션이 작업 중에 테이블에 계속 액세스 할 수 있도록 일부 구체화 된 뷰 로그를 사용합니다.

자신이 테이블의 컬럼의 순서에 대한 배려 발견하면,하지만 당신은 당신이 아니라 하나의 경로에 전진을 계속보다 잘못된 무슨 짓을했는지 알아 내기 위해 정지 해제 훨씬 더 낫다. 예외적으로 테이블의 열의 실제 순서를 신경 써야한다는 것은 드문 경우입니다.

+0

justin - 열의 물리적 순서가 중요 해지는 드문 경우를 보여 줄 수 있습니까? –

+0

@breadbutter - 대부분의 경우 사람들은 잘못 작성된 응용 프로그램 때문에 열 순서에 신경을 썼습니다. 오라클이 제공 할 수있는 압축 비트를 활용하기 위해 테이블 ​​끝에 일반적으로 'NULL'이 될 여러 열을 넣으려는 경우 잘 만들어진 응용 프로그램이 테이블의 열 순서에 신경을 쓸 수 있습니다 케이스. 그러나 테이블에 대부분 NULL 열이 수십 개 있거나 어디에서 몇 바이트의 저장 공간을 절약 할 수 있는지 신경 쓰는 데이터 모델을 사용하는 것은 극히 드뭅니다. –