| Table of Contents | ||
|---|---|---|
|
...
자동 형 변환 과정에서 변환하려는 데이터 타입으로 변환할 수 없는 값을 가질 때 발생할 수도 있습니다.
사례 1. UNION, UNION ALL 사용 시 맵핑이 되는 컬럼에 대해 데이터 타입이 다를 때.
...
| Code Block | ||
|---|---|---|
| ||
iSQL> CREATE TABLE T (NO CHAR(1));
Create success.
iSQL> INSERT INTO T VALUES('1');
1 row inserted.
iSQL> INSERT INTO T VALUES('2');
1 row inserted.
iSQL> SELECT * FROM T WHERE NO = 1; -- CHAR형 컬럼의 값을 숫자형 데이터와 비교함. NO 컬럼의 값이 숫자형으로 자동 형 변환이 이루어짐.
NO -- NO 컬럼에 숫자형으로 변환 가능한 값만 존재하기 때문에 에러없이 수행됨.
------
1
1 row selected.
iSQL> INSERT INTO T VALUES('A'); -- NO 컬럼에 숫자형으로 변환할 수 없는 값이 입력.
1 row inserted.
iSQL> SELECT * FROM T WHERE NO = 1; -- NO 컬럼의 값을 숫자형으로 자동 형 변환이 이루어지면서 'A' 라는 값 때문에 Invalid literal 에러가 발생함.
[ERR-21011 : Invalid literal]
iSQL> SELECT * FROM T WHERE NO = '1'; -- 문자형 컬럼에는 비교 값에 작은 따옴표(') 를 사용해야함.
NO
------
1
1 row selected.
iSQL> INSERT INTO T VALUES(' '); -- NO 컬럼에 공백 문자로 포함된 경우도 Invalid literal 에러가 발생함.
1 row inserted.
iSQL> SELECT TO_NUMBER(NO) FROM T;
[ERR-21011 : Invalid literal]
iSQL> SELECT TO_NUMBER(TRIM(NO)) FROM T; -- 공백 문자의 경우 TRIM 함수를 이용하면 에러를 없앨 수 있음.
TO_NUMBER(TRIM(CODE))
------------------------
1
2
3 rows selected.
iSQL> |