CHAR 타입에 대한 이해를 먼저 하셔야 합니다.
CHAR 타입은 고정길이 타입입니다.
만약 CHAR(20) 칼럼에 'haha'를 넣으면 실제로 DB에는
'haha ' 이 입력됩니다.
20자리가 안되면 뒤에 공백을 20자리까지 채워서 저장합니다.
당연히 두 칼럼을 합치면 40자리 문자열이 됩니다.
만약 밑의 'haha' 와 'hoho' 를 합쳐서 'hahahoho'로 저장을 하려면 뒷공백을
짜르고 합쳐야 합니다.
( 주의 하셔야 할 점은 실제 데이타에 공백을 넣은 경우는 이 공백이
데이타인지 구별할 방법이 없다는 점입니다. )
UPDATE table_name
SET ATT1 = rtrim(ATT1) || rtrim(ATT2)
WHERE ATT1='haha';
그러면 'hahahoho ' 이란 데이타가
입력되어 있을 겁니다.
일반적으로 디스크 공간을 1MB 라도 절약하겠다는 절박한 사정이
없다면 그냥 VARCHAR2 를 사용할 것을 권합니다.
> CONCAT 함수를 써서 DB의 attribute 내용을 합치려고 합니다.
>
> 만일
>
> ATT1 CHAR(20)
> ATT2 CHAR(20)
>
> 이고,
>
> ATT1='haha'
> ATT2='hoho'
>
> 라고 합시다.
>
> 여기서 저는 ATT1의 내용을 'hahahoho'로 바꾸려고 합니다.
>
> 그래서
>
> UPDATE table_name SET ATT1 = CONCAT(ATT1, ATT2) WHERE ATT1='haha';
>
> 와 같이 했는데 ORA-01401: inserted value too large for column
>
> 와 같은 에러가 나왔습니다.
>
> ATT1의 길이가 20, ATT2의 길이가 20이라서 CONCAT결과는 40이므로 ATT1에 그 결과를
>
> 넣을 수 없다는 것 같은데요.
>
> 그럼 ATT1과 다른 attribute를 CONCAT 해서 ATT1에 다시 넣을 순 없는건가요?
>
> 'haha'와 'hoho'를 합쳐도 20자는 안 되잖아요. ㅠ_ㅠ
>
> 도와주세요!!
>
> 미리 감사드립니다. 꾸벅~
|