问题描述
041522$$$$$$$$$NAPTTALIE REVERE @1621500025 OLD ST FUNNRHILL MA1530 273 000000$$$$$$$03@$$$@@@@@@@@@@@@@@$$$$$$$$$$$$$$$$$$Z$$$$$$$$$$$$$$$$$$$$$$@@@$$$$$$$$$$$$$$$$$$$$$@@@@@$$$$$$$$$$$$$$$@$$$$$0$$$$$$$$$$$000000$$$$$$$$$$$$@$$@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@$$$$$$$$$$$$000000$$$$$$$$$$$$$A@@@Y$$$$$$$$$$$$$1@@$$$$$$$$$$$$$$$$$$$@@02$$$$$$$$$$$$$@$$$$$$$$$$$$$$$$$$$$$$@@Y@@@@@@@$$$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
控制文件:
LOAD DATA CHaraCTERSET "UTF8" INFILE 'C:\bendex\MA_File38\fileout.txt' BADFILE 'C:\bendex\MA_File38\baddata.bad' disCARDFILE 'C:\bendex\MA_File38\discdata.dsc' APPEND INTO TABLE "TMP_DATA_1220" TRAILING NULLCOLS ( SOURCE CONSTANT "TEST",FILE_DTE "Trunc(SYSDATE)",AU_REGION POSITION (1:2),AU_OFFICE POSITION (3:5),AU_pgm_CATEGORY POSITION (6),GRANTEE_SSN POSITION (7:15),GRANTEE_NAME POSITION (16:38),CAT_ELIG_IND POSITION (39),PHONE POSITION (40:47),ADDRESS POSITION (48:70),CITY POSITION (71:83),STATE POSITION (84:85),ZIP POSITION (86:90),CAN_NUM POSITION (91:95),NET_INC POSITION (96:101) "TO_NUMBER(:NET_INC)",START_DTE POSITION (102:107) "CASE WHEN :START_DTE ='$$$$$$' THEN TO_CHAR(REPLACE(:START_DTE,'$','0')) ELSE DATE 'rrmmdd'",LAST_UPDT_UID_NAM CONSTANT "LOADF38",LAST_UPDT_TS "SYSTIMESTAMP" )
**Error:** Record 1: Rejected - Error on table "TMP_DATA_1220",column START_DTE. ORA-01841: (full) year must be between -4713 and +9999,and not be 0
我必须从文本文件中读取数据并加载到表中。我尝试将“ $”替换为“ 0”并将其转换为日期字段,位置102到107,但出现错误。我尝试使用REPLACE,但DECODE无效。
我们非常感谢您的帮助。谢谢。
注意:文本文件具有全长数据,但是使用sql Loader只能读取前几个数据点。
解决方法
我相信您希望将无效的开始日期设为NULL,不是吗?
"CASE WHEN :START_DTE ='$$$$$$' THEN NULL ELSE to_date(:START_DTE,'rrmmdd') END"