SQL Loader有条件地使用另一列进行加载

问题描述

我试图使用另一列的引用有条件地将值加载到表中的一列中。

这是我的ctl文件

OPTIONS (SKIP=1)
load data
infile "C:\Users\admin\Desktop\Price Redesign\wcsCtoPrice*.csv"
append into table XCTOPRICELOAD
fields terminated by "|"
optionally enclosed by '"' TRAILING NULLCOLS
(TradE_POS_NAME,PS_FLAG,MEMBER_ID "CASE WHEN PS_FLAG = '1'  THEN '7333333333333536385'  ELSE '7000000000000000103' END",PRICE_ID,COUNTRY,PRICE_GEO,INCO_TERMS,PRICE_LIST_TYPE,CURRENCY,CONfig_ID,GENERIC_PRICE_FLAG,OVERALL_STATUS,NET_PRICE,PRICE_START_DATE,PRICE_END_DATE,PRICE_SOURCE,DEAL_NUMBER,PA_NR,TIER_ID,PRICE_ERROR_MSG,DELETE_FLAG)

这是表结构

create table XCTOPRICELOAD
(
ID number generated by default on null as identity,TradE_POS_NAME varchar2(254),PS_FLAG VARCHAR2(254),MEMBER_ID VARCHAR2(254),PRICE_ID VARCHAR2(254),COUNTRY varchar2(5),PRICE_GEO varchar2(5),INCO_TERMS varchar2(5),PRICE_LIST_TYPE varchar2(254),CURRENCY varchar2 (5),CONfig_ID varchar2(20),GENERIC_PRICE_FLAG varchar2 (5),OVERALL_STATUS varchar2 (5),NET_PRICE varchar2(20),PRICE_START_DATE varchar2(30),PRICE_END_DATE varchar2(30),PRICE_SOURCE varchar2 (5),DEAL_NUMBER varchar2 (20),PA_NR varchar2 (10),TIER_ID varchar2 (10),PRICE_ERROR_MSG varchar2 (254),DELETE_FLAG varchar2 (5),IS_ACTIVE NUMBER(1),CONSTRAINT PK_XCTOPRICELOAD PRIMARY KEY (ID)
);

这是我的输入文件

TradE_POS_NAME|PS_FLAG|PRICE_ID|COUNTRY|PRICE_GEO|INCO_TERMS|PRICE_LIST_TYPE|CURRENCY|CONfig_ID|GENERIC_PRICE_FLAG|OVERALL_STATUS|NET_PRICE|PRICE_START_DATE|PRICE_END_DATE|PRICE_SOURCE|DEAL_NUMBER|PA_NR|TIER_ID|PRICE_ERROR_MSG|DELETE_FLAG
0_ECI0406795_02_DK_DDP|0|ECI0406795|DK|02|DDP||USD|31489611|N|V|2974.73|2020-05-04 00:00:00.000000|9999-12-31 23:59:00.000000|LP|||||N

我收到MEMBER_ID列加载的列拒绝错误

对此有任何帮助吗?

解决方法

在您要引用的字段前面加一个冒号。

MEMBER_ID "CASE WHEN :PS_FLAG = '1'  THEN '7333333333333536385'  ELSE '7000000000000000103' END"