问题描述
我们正在尝试在CSV之上创建Oracle外部表,并且Merge语句用于执行Upsert操作,以将数据从外部表复制到主表。 当我们尝试多次执行同一Merge语句时,出现奇怪的错误(错误的魔术数)。
请注意,当只有插入且仅针对更新(在merge语句中存在)发生问题时,上述merge语句才起作用。如果数据已损坏,则第一次运行本身应该有错误。这只是在我们尝试多次更新/合并的情况下发生。
请告知我们所缺少的内容。
错误
Error report - ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-29401: data cartridge internal error [External Table Internal Error: [kpxsFetch:**Bad Magic Numbe**r] ]
合并声明
merge /*+ parallel(4) */ into MAIN_TABLE scpo using (select distinct xt.ACTIONCODE,xt.ITEM,xt.LOC,xt.MINSHELFLIFEDUR,xt.MINSHIPSHELFLIFEDUR,xt.SHELFLIFEDUR from EXTERNAL_TABLE xt left join MAIN_TABLE scpo on xt.ITEM = scpo.ITEM AND xt.LOC = scpo.LOC where xt.ACTIONCODE in ('ADD','CHANGE_BY_REFRESH')) ext on (ext.ITEM = scpo.ITEM AND ext.LOC = scpo.LOC and ext.ACTIONCODE in ('ADD','CHANGE_BY_REFRESH') ) when matched then update set scpo.MINSHELFLIFEDUR = ext.MINSHELFLIFEDUR,scpo.MINSHIPSHELFLIFEDUR = ext.MINSHIPSHELFLIFEDUR,scpo.SHELFLIFEDUR = ext.SHELFLIFEDUR when not matched then insert (ITEM,LOC,MINSHELFLIFEDUR,MINSHIPSHELFLIFEDUR,SHELFLIFEDUR) values (ext.ITEM,ext.LOC,ext.MINSHELFLIFEDUR,ext.MINSHIPSHELFLIFEDUR,ext.SHELFLIFEDUR) LOG ERRORS INTO ERR_MAIN_TABLE('MERGE-3369949')
外部表脚本:
CREATE TABLE EXTERNAL_TABLE
( "ACTIONCODE" VARCHAR2(50 CHAR),"ITEM" VARCHAR2(50 CHAR),"LOC" VARCHAR2(50 CHAR),"MINSHELFLIFEDUR" NUMBER(38,0),"MINSHIPSHELFLIFEDUR" NUMBER(38,"SHELFLIFEDUR" NUMBER(38,0)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "LANG_EXTERNAL"
ACCESS PARAMETERS
( RECORDS DELIMITED BY "\n\r" SKIP 1 FIELDS TERMINATED BY "," MISSING FIELD VALUES ARE NULL (ACTIONCODE,ITEM,SHELFLIFEDUR) )
LOCATION
( 'externaltable.csv'
)
)
REJECT LIMIT UNLIMITED
PARALLEL 4 ;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)