2014-12-16 2 views
0

나는 SQLoader를 통해 데이터를로드하기 위해 노력하고있어,하지만 잘못된 번호SQL 로더 - 잘못된 번호

내 데이터 파일의 숫자 필드에 나에게 오류를 제공합니다

00163604~12002~S~N~N~Panasonic Juicer 1.5l Steel Color~ss~E~A~12/15/2014 3:33:57 PM~N~N~N~Y~294~SA 

제어 파일 :

LOAD DATA 
INFILE "/home/dmf/ITEMLOC.txt" 
APPEND 
INTO TABLE DMF.MIG_ITEM_LC 
FIELDS TERMINATED BY "~" 
TRAILING NULLCOLS 
(
ITEM "SUBSTRB(:ITEM,1,25)", 
LOC "TO_NUMBER(:LOC)", 
LOC_TYPE "SUBSTRB(:LOC_TYPE,1,1)", 
CLEAR_IND "SUBSTRB(:CLEAR_IND,1,1)", 
TAXABLE_IND "SUBSTRB(:TAXABLE_IND,1,1)", 
LOCAL_ITEM_DESC "SUBSTRB(:LOCAL_ITEM_DESC,1,250)", 
LOCAL_SHORT_DESC "SUBSTRB(:LOCAL_SHORT_DESC,1,120)", 
STORE_ORD_MULT "SUBSTRB(:STORE_ORD_MULT,1,1)", 
STATUS_UPDATE_DATE sysdate, 
STATUS "SUBSTRB(:STATUS,1,1)", 
STORE_PRICE_IND "SUBSTRB(:STORE_PRICE_IND,1,1)", 
RPM_IND "SUBSTRB(:RPM_IND,1,1)", 
EXT_UIN_IND "SUBSTRB(:EXT_UIN_IND,1,1)", 
RANGED_IND "SUBSTRB(:RANGED_IND,1,1)", 
PRIMARY_SUPP "TO_NUMBER(:PRIMARY_SUPP)", -- The Error is coming here 
PRIMARY_CNTRY "SUBSTRB(:PRIMARY_CNTRY,1,3)" 
) 

거절 됨 - DMF.MIG_ITEM_LC 열, PRIMARY_SUPP 열에 오류가 있습니다. ORA-01722 : 올바르지 않은 번호

필자에게 상수를 쓰면 성공적으로로드됩니다.

무엇이 문제 일 수 있습니까?

+0

PRIMARY_SUPP 열은 데이터베이스에서 어떻게 정의됩니까? 모든 행 또는 특정 행에서 실패합니까? 데이터가 보이지 않는 제어 문자를 포함 할 수 있습니까? 오, 설명 열에는 구분 기호가 들어 있지 않으므로 모든 항목이 열에 의해 버려지는지 확인하십시오. –

+0

데이터베이스에 NUMBER로 정의되어 있습니다. 및 설명이 구분 기호를 가지고 있지 않습니다. 상수 PRIMARY_SUPP 상수를 '2'로 지정하면로드됩니다. 하지만 데이터 파일의 값이 아닙니다. –

답변

0

게시 된 데이터가 정상적으로로드됩니다. 당신이 게시 단지 하나 개의 레코드를로드하는 동안이 오류가 발생하면

create table test1 
(
item varchar2(25), 
loc number, 
loc_type char(1), 
clear_ind char(1), 
taxable_ind char(1), 
local_item_desc varchar2(250), 
local_short_desc varchar2(120), 
store_ord_mult char(1), 
status char(1), 
store_price_ind char(1), 
rpm_ind char(1), 
ext_uin_ind char(1), 
ranged_ind char(1), 
primary_supp number, 
primary_cntry varchar2(3) 
); 

, 그때 내가 @Gary_W처럼 인쇄 할 수없는 문자를 의심 것 : 여기

SQL> select version from v$instance; 

VERSION 
----------------- 
11.2.0.2.0 

내가 사용하는 CREATE TABLE 문이다 제안했다. 확인할 16 진수 뷰어로 데이터를 봅니다.

파일과 NLS_LANG 설정 간의 문자 세트 차이는 잘못되었을 수 있지만 데이터는 모든 ASCII 값인 것처럼 보이기 때문에이 경우에는이 파일을 사용하는 것이 좋습니다.

+0

감사합니다 Russell, 저는 sysdate를 삽입 한 데이터 파일에서 날짜 값 중 하나를 읽는 중이었습니다. 그래서 그 변수에 대한 sysdate를 삽입하고 파일에서 다음 변수로 데이터를 밀어 넣었습니다. (업데이트 된 제어 파일) 또 다른 질문 인 은 데이터 파일에서 레코드를 읽고 그 값을 사용하지 않고 상수 값을 사용하는 방법이 있습니까? –

+0

이 경우 가장 간단한 방법은 STATUS_UPDATE_DATE 열을 sqlldr 제어 파일의 끝으로 이동하는 것입니다. 여기서 Oracle은 TRAILING NULLCOLS 옵션을 사용 했으므로 데이터에 추가 필드가있는 것처럼 가장합니다. –

+0

완벽. 잘 작동합니다. –