首页 > 解决方案 > 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 列加载的列被拒绝错误。

请问这方面有什么帮助吗?

标签: oraclesql-loader

解决方案


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

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

推荐阅读