데이터를 사용하여 열의 데이터 유형을 변경하는 방법
자리가 있다고 치자.call_log
이름이 지정된 열이 있는 경우duration
더 나아가 제가 테이블을 정리했을 때, 제가 실수를 했다고 가정해 보겠습니다.duration
숫자 대신 막대 열을 입력합니다.이제 저는 그 열을 제대로 정렬할 수 없습니다.열 이름을 바꾸고 싶어서...
ALTER TABLE call_log MODIFY (duration NUMBER);
하지만 난...
ORA-01439: column to be modified must be empty to change datatype.
내 테이블이 사용 중이고 데이터가 있습니다!그리고 저는 데이터를 잃고 싶지 않습니다.데이터 손실 없이 열의 데이터 유형을 수정하려면 어떻게 해야 합니까?
올바른 데이터 유형을 사용하여 임시 열을 만들고, 데이터를 새 열에 복사한 다음, 이전 열을 삭제하고, 이전 열 이름과 일치하도록 새 열 이름을 변경합니다.
ALTER TABLE call_log ADD (duration_temp NUMBER);
UPDATE call_log SET duration_temp = duration;
ALTER TABLE call_log DROP COLUMN duration;
ALTER TABLE call_log RENAME COLUMN duration_temp TO duration;
이 답변에 대한 아이디어는 오라클의 포럼에서 나왔습니다.
이전 솔루션은 훌륭하지만 call_log 테이블 구조의 열 순서를 변경하지 않으려면 다음 단계를 수행합니다.
create table temp_call_log as select * from call_log; /* temp backup table for call_log */
UPDATE call_log SET duration = null;
/*check,... be sure.... then commit*/
commit;
ALTER TABLE call_log MODIFY duration NUMBER;
UPDATE call_log c SET c.duration = (select t.duration from temp_call_log t where t.primarykey_comumn = c.primarykey_column);
/*check,... be sure.... then commit*/
commit;
drop table temp_call_log;
참고 1: primarykey_column을 call_log 테이블의 primary 키로 변경합니다.
참고 2: 이 솔루션은 데이터 크기가 크지 않다고 가정합니다.
열의 원래 순서를 보존하는 가장 좋은 솔루션은 임시 열을 생성하고 데이터를 여기에 복사한 다음 원래 열을 null로 설정하고 유형을 수정한 다음 임시 열의 데이터를 다시 해당 열로 설정하고 임시 열을 삭제하는 것입니다.
ALTER TABLE call_log ADD duration_temp NUMBER;
UPDATE call_log SET duration_temp = duration;
UPDATE call_log SET duration = NULL;
ALTER TABLE call_log MODIFY duration NUMBER;
UPDATE call_log SET duration = duration_temp;
ALTER TABLE call_log DROP (duration_temp);
처음 두 가지 솔루션을 사용할 수 없었습니다.
CREATE TABLE call_log_temp AS (SELECT * FROM call_log where rownum = 0);
ALTER TABLE call_log_temp MODIFY duration NUMBER;
INSERT INTO call_log_temp( id, duration, and_all_other_columns, ... )
SELECT id, duration, and_all_other_columns, ...
FROM call_log;
DROP TABLE call_log;
ALTER TABLE call_log_temp RENAME TO call_log;
언급URL : https://stackoverflow.com/questions/23156099/how-to-change-datatype-of-column-with-data
'source' 카테고리의 다른 글
PowerShell에서 절대 경로를 상대 경로로 변환하는 방법은 무엇입니까? (0) | 2023.07.28 |
---|---|
감지되지 않은 오류:'AppModule' 모듈에서 예기치 않은 모듈 'FormsModule'을(를) 선언했습니다.@Pipe/@Directive/@Component 주석을 추가하십시오. (0) | 2023.07.28 |
하위 쿼리의 문자열을 MySQL의 단일 행으로 연결하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
웹어셈블리로 컴파일된 러스트 라이브러리에서 C 라이브러리를 사용하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
Oracle SQL을 사용하여 요일 번호와 요일을 어떻게 출력합니까? (0) | 2023.07.23 |