2010-06-22 4 views
13

참고 : I 오전 질문하고 싶은 답변을드립니다. 이 질문은 데이터베이스가 제대로 설정되지 않았다는 것을 의미합니다. 그래서 나는 테이블이 설정되는 방식을 바꾸라고 제안하는 답변에 투표 할 것입니다.오라클 : 한 필드를 업데이트하는 동안 행 복사

하나의 값을 변경하면서 여러 행을 복제해야합니다. , namecol1가 복사되는 테이블에 새 항목을 만들 col2 is null이 테이블의 모든 항목에 대해

name col1 col2 
dave a nil 
dave a a 
sue b nil 
sue b a 
same c 5 

IE를하고, col2a입니다 :

name col1 col2 
dave a nil 
sue b nil 
sam c 5 

가 될 필요가있다.

+0

경우에 따라 'nil'이라고 표시되면 'NULL'을 의미합니까? – tvCa

답변

17

사용 : 어느 쪽도 name 또는 col1 열이 기본 키 없거나 하나에 고유 제한 조건이 있으리라 믿고있어

INSERT INTO table 
    (name, col1, col2) 
SELECT t.name, t.col1, 'a' 
    FROM TABLE t 
WHERE t.col2 IS NULL 

.

+0

이전에 삭제 된 메모 : 내 버그를 발견했습니다. 네, 이것은 효과가있었습니다. 감사! –

+3

이 코드는 테이블 열 목록을 반복해야하며 열이 테이블에 추가되면 중단됩니다. 관심없는 열을 나열하지 않고이를 수행 할 수있는 방법이 있습니까? –

+0

@kevincline http://stackoverflow.com/a/28278824/1611055 –

3

이렇게 할 수 있습니까?

INSERT INTO yourtable 
     (SELECT name, col1, 'a' 
      FROM yourtable 
     WHERE col2 is NULL); 
+0

+ 1 좋은 답변, 내 경우에는 실제로 작동하지 않지만. 테이블의 일부 필드 만 채우고 있습니다. –

+0

테이블에 열이 더 있으면 ORA 오류가 발생합니다. –

+0

예, 테이블에 예제의 열이 있다고 가정합니다. – DCookie

0

열 수가 큰 경우, 당신은 당신이 원하는대로 임시 테이블의 데이터를 변경 한 후 원래로 다시 임시 테이블의 내용을 복사, 임시 테이블에 원하는 데이터를 복사 할 수 있습니다 , 임시 테이블을 h 제하십시오.

관련 문제