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> |