sql loader 질문드립니다 0 6 1,197

by 사비타 [2018.04.26 14:05:43]


 

정말 골머리를 앓고 있는 문제가 있는데요

 

현재 데이터는 aaa/bbbbbbb       /01012345678    / 32      /bbbccc

 

이런식으로 들어가 있는데요.

 

1. 계속 숫자컬럼 부분에서 invalid number 에러가 납니다

해당 테이블의 컬럼은 nubmer이고 ctl에서

amt decimal external 또는 integer external 또는

amt position(14,16) decimal

아니면 amt char(14) to number를 써도 안되고

뭘 어떻게 해줘도 계속 저 에러를 해결못하고 있네요 ㅠㅠ

 

2. 데이터가 엔터로 구분되있는게 아닌 쭈욱 들어가 있는데요

숫자컬럼 빼고 문자 컬럼들만 삽입해서 성공해도

1 줄만 들어가네요. 왜 다른 row는 안들어가 질까요;;

 

3. 마지막으로 제 현재 방식이

proc에서 데이터를 조회한 후 파일로 만들고

이 파일을 sql loader로 읽어서 다른 테이블로 빠르게 insert 하려는 건데요

맨 처음 조회해올떄(

select empno || '구분자'  no, empdept  || '구분자' empdept ...

이렇게 각각의 컬럼에 구분자를 넣어줘도 되는지

아니면

select empno || '구분자' || empdept || '구분자'

이런식으로 한 컬럼에 쭈욱 다 구분자로 연결해서 붙여줘야 되는지

어떤 방식으로 하는게 맞는지요??

 

답변 세개중에 하나라도 꼭 좀 부탁드리겠습니다.

 

 

 

by 신이만든지기 [2018.04.26 18:22:23]

1. 오류 메시지 그대로, 특정 row 에서 문자가 포함되어 에러가 발생하는 겁니다. bad 파일을 확인해 보시기 바랍니다. 오류의 원인이 되는 데이터가 저장되어 있습니다.

2. 원래 다수의 row가 1개의 row으로 변환되어 저장됐다는 말인가요? 그렇다면 row 구분자가 뭔지를 명시해 줘야 합니다. 그런데 1개의 row는 1개 줄로 해주는 게 오류를 찾는데 도움이 됩니다.

3. 같은 DB상에서다른 테이블로의 데이터 이관 작업인가요? 그렇다면 create table ... as select 명령어를 사용하시는게 가장 빠릅니다. 서로 다른 DB라면 DB LINK를 고려해보시기 바랍니다.  대량의 데이터 이관작업이라면 백업과 복구 방식이 빠릅니다. 

 

그리고 질문자의 현재 상황을 이해하는데는 설명이 많이 부족합니다.

그래서 답변도 상황을 추측하여 적어놓았습니다. 

보다 정확한 답변을 기대하려면, 답변자의 입장에서 필요한 정보를 전달해 줘야 합니다. (예: 샘플데이터, 컨트롤 파일등)

 


by 사비타 [2018.04.26 21:37:50]

...


by 사비타 [2018.04.26 21:39:59]

aaaaaaaaaaaaaaaaaaa


by 마농 [2018.04.26 22:20:06]

usg_end_tm 6자리 이후에 공백이 엄청 많은데.
prod_cd 의 시작 위치가 공백의 개수가 반영이 안되어 있네요.
여기서 부터 꼬이기 시작합니다.
FIELDS TERMINATED BY '|' 사용하면서 POSITION 사용하네요?
둘중에 하나만 쓰세요.


by 신이만든지기 [2018.04.27 10:44:24]

파일자체를 업로드하셨다면 더 분석이 쉬웠을 텐데 아쉽네요.

마농님 말씀처럼 본래 필드 구분자와 position 둘중 하나만 사용해야 하는데 둘다 사용하셨네요.

오류가 나는 것으로 보건데, 필드구분자( | ) 가 적용되고  position은 무시되는 것으로 보입니다. 

그리고 필드구분자의 종결문자를 | 으로 사용하겠다는 의미로, 질문자의 데이터형태에서는 첫 필드는 널문자로 인식합니다.

그러므로 데이터 타입이 한칸씩 밀려 오류가 발생하는 것으로 보이며, 오류를 해결하기 위해서는 맨 앞줄의 | 를 떼어주시면 되겠습니다.

변경 전 : |201803 .... 중략

변경 후 : 201803 ..... 중략

덧붙여서  컨트롤 옵션중에 bad 파일을 명시하여, 오류가 발생하는 원인이 되는 데이터를 분류하여 볼수 있습니다. 

Load DATA
INFILE 'CDR_FILE1_ONSE_MVNO.DAT'

BADFILE 'CDR_FILE1_ONSE_MVNO.BAD'
APPEND
INTO TABLE tmpuser.TMP_TOS_DMST_MV_DTL_P
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS


by 마농 [2018.04.27 10:58:34]
LOAD DATA
 INFILE  CDR_FILE1_ONSE_MVNO.DAT
 BADFILE CDR_FILE1_ONSE_MVNO.BAD
 APPEND
 INTO TABLE tmpuser.tmp_tos_dmst_mv_dtl_p
 FIELDS TERMINATED BY '|'
 TRAILING NULLCOLS
( x               FILLER
, sttl_yymm       "TRIM(:sttl_yymm      )"
, mvno_crr_id     "TRIM(:mvno_crr_id    )"
, data_src        "TRIM(:data_src       )"
, collect_dt      "TRIM(:collect_dt     )"
, bill_seq        "TRIM(:bill_seq       )"
, usg_strt_dt     "TRIM(:usg_strt_dt    )"
, ctrt_id         "TRIM(:ctrt_id        )"
, usg_strt_tm     "TRIM(:usg_strt_tm    )"
, svc_cd          "TRIM(:svc_cd         )"
, called_no       "TRIM(:called_no      )"
, bill_phone_no   "TRIM(:bill_phone_no  )"
, calling_no      "TRIM(:calling_no     )"
, sttl_dmst_svc   "TRIM(:sttl_dmst_svc  )"
, sttl_itm_cd     "TRIM(:sttl_itm_cd    )"
, pym_acnt_id     "TRIM(:pym_acnt_id    )"
, bill_mnth       "TRIM(:bill_mnth      )"
, usg_end_dt      "TRIM(:usg_end_dt     )"
, usg_end_tm      "TRIM(:usg_end_tm     )"
, prod_cd         "TRIM(:prod_cd        )"
, prod_cmps_id    "TRIM(:prod_cmps_id   )"
, airtm           "TRIM(:airtm          )"
, dfw_tp          "TRIM(:dfw_tp         )"
, dialed_no       "TRIM(:dialed_no      )"
, charge_or_not   "TRIM(:charge_or_not  )"
, call_item_cd    "TRIM(:call_item_cd   )"
, call_kind       "TRIM(:call_kind      )"
, calling_ptel    "TRIM(:calling_ptel   )"
, called_ptel     "TRIM(:called_ptel    )"
, calling_natn_cd "TRIM(:calling_natn_cd)"
, called_natn_cd  "TRIM(:called_natn_cd )"
, calling_crr_cd  "TRIM(:calling_crr_cd )"
, called_crr_cd   "TRIM(:called_crr_cd  )"
, patr_natn_cd    "TRIM(:patr_natn_cd   )"
, bill_typ        "TRIM(:bill_typ       )"
, corridor        "TRIM(:corridor       )"
, totl_used_chrg  "TRIM(:totl_used_chrg )"
)

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입