티스토리 뷰

반응형

예전에 데이터베이스 사랑넷에서 dbload를 사용해서 특정 형식의 datetime 데이터를 입력하는 방법에 대해 답변한 적이 있는데 IBM Community에도 질문이 올라왔네요. 블로그에도 정리할 겸 올려봅니다.

 

먼저 입력하려는 데이터 형식은 '2019.10.03 05:24:24' 이런 식입니다.

인포믹스에서 기본 datetime 포맷을 살펴보면 아래와 같습니다.

[informix@db2 ids1410fc3]$ echo "select current::datetime year to second " | dbaccess stores_demo

Database selected.



(expression)

2020-07-09 20:51:26

 

기본 포맷이 저렇게 표시되다보니 dbload로 데이터를 입력하면 아래와 같이 오류가 발생합니다.

-- 테스트용 테이블 스키마
[informix@db2 ids1410fc3]$ dbschema -d stores_demo -t test
create table "informix".test
  (
    v1 char(10),
    dt datetime year to second
  );

-- 테스트용 테이블에 입력할 데이터
[informix@db2 ids1410fc3]$ cat test.unl
|2019.10.03 05:24:24|

-- dbload 실행에 사용할 커맨드 파일
[informix@db2 ids1410fc3]$ cat test.cmd
FILE test.unl DELIMITER '|' 2;

-- dbload 실행 결과
[informix@db2 ids1410fc3]$ dbload -d stores_demo -c test.cmd -l errlog

DBLOAD Load Utility           INFORMIX-SQL Version 14.10.FC3

In INSERT statement number 1 of raw data file test.unl.
Row number 1 is bad.
|2019.10.03 05:24:24|

Input does not match format specification.


Table test had 0 row(s) loaded into it.

저렇게 포맷이 맞지 않다고 1277 오류가 발생하네요.

과거에 제가 답변한 내용이 있어서 쉽게 해결할 수 있었습니다.

dbload 실행전에 GL_DATETIME과 USE_DTENV 환경변수를 설정하면 오류 없이 잘 실행됩니다. 각 환경변수에 대한 설명은 아래에 나와 있는데, 각 환경변수를 설정하더라도 실제로 데이터가 사용자가 지정한 형식으로 저장되는 것은 아니고 보여지는 형식만 바뀌는 것이라고 합니다.

www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.glsug.doc/ids_gug_085.htm?origURL=SSGU8G_11.70.0/com.ibm.glsug.doc/ids_gug_085.htm

 

그래서 GL_DATETIME과 USE_DTENV를 설정하고 다시 dbload를 실행한 결과입니다.

[informix@db2 ids1410fc3]$ export GL_DATETIME="%Y.%m.%d %H:%M:%S"
[informix@db2 ids1410fc3]$ export USE_DTENV=1
[informix@db2 ids1410fc3]$ dbload -d stores_demo -c test.cmd -l errlog

DBLOAD Load Utility           INFORMIX-SQL Version 14.10.FC3

Table test had 1 row(s) loaded into it.

 

반응형
댓글