2012-08-02 2 views
0

SQL 로더에서 IF CLAUSE를 사용할 수 있습니까? 코드를 작성했지만 오류가 발생했습니다.SQL 로더의 절

INTO TABLE TF_RTB9_DTL 
WHEN ((01) = 'D') OR (if 
(POA_COU_VAL = 0) 
then MAST_POA_ID = null 
end if) 
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
( 

TRANS_TYP POSITION(3), 
BO_ID , 
NAME , 
MID_NAM , 
LAS_NAM , 
PAN , 
NAM_FIR_JOINT , 
MIDD_NAM_FIR_JOINT, 
LAS_NAM_FIR_JOINT , 
PAN_FIR_JOINT , 
NAM_SEC_JOINT , 
MIDD_NAM_SEC_JOINT, 
LAS_NAM_SEC_JOINT , 
PAN_SEC_JOINT , 
ADD_LIN_1 , 
ADD_LIN_2 , 
ADD_LIN_3, 
CITY , 
STATE , 
COUNTRY , 
PIN_COD , 
PERM_ADD_LIN_1 , 
PERM_ADD_LIN_2 , 
PERM_ADD_LIN_3 , 
PERM_CITY , 
PERM_STATE , 
PERM_COUNTRY , 
PERM_PIN_COD , 
POA_COU_VAL , 
MAST_POA_ID , 
TRANS_ID 
) 

POA_COU_VAL 인 경우 POA_COU_VAL 0보다가 null이어야하며 다음 값이 TRANS_ID에 입력해야합니다. 이것을 어떻게 할 수 있습니까?

답변

4

SQL * Loader는 대량의 데이터를로드하는 프로그램입니다. 로드 프로세스 중 데이터를 조작하기위한 기능은 제한적입니다.

데이터를 변환하려면 대신 외부 테이블을 사용해야합니다. 이들은 SQL * Loader와 매우 유사합니다 (정의는 사실상 동일한 구문을 사용하지만 테이블에 데이터 파일을 데이터베이스에 표시합니다. 즉, SQL을 사용할 수 있음을 의미하므로 명령 줄에서 SQL * Loader를 호출 할 때 .

insert into target_table 
select * from external table; 

만 당신이 당신의 추가 로직을 구현하기 위해 CASE() 문을 포함 할 수 있도록 SELECT 절의 프로젝트를 폭발해야하는 상황에

Find out more about external tables here.

이 같은 삽입 문을 실행 woudl
+0

안녕하세요. 사례 또는 디코딩 문을 사용할 수 있습니다. 예를 들면 다음과 같습니다. - decode (POA_COU_VAL, 0, MAST_POA_ID) –

+0

CASE는 DECODE보다 유연한 기능이지만 원하는 경우 DECODE를 사용하십시오. – APC

1

SQL * Loader WHEN 절에는 부울 값만있는 operato 만 있습니다. rs, 특히 OR이 누락되었습니다 (http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005657 참조). 당신의 SQL * 로더를 사용하는이 (와 APC가 제안 외부 테이블로 전환 할 수 없습니다) 경우

, 당신은 OR 절의 각 부분에 대한 INTO 섹션을 곱해야합니다. 예를 들어

:

INTO TABLE TF_RTB9_DTL 
WHEN (01) = 'D' 
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
( 
TRANS_TYP POSITION(3), 
...  
...  
MAST_POA_ID 
) 
INTO TABLE TF_RTB9_DTL 
WHEN POA_COU_VAL = '0' 
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
( 
TRANS_TYP POSITION(3), 
...  
...  
MAST_POA_ID "NULL" 
) 

또는 NULLIF 기능 (http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_field_list.htm#i1009345)

... 
MAST_POA_ID NULLIF POA_COU_VAL = '0' 
... 

의 SQL * 로더는 AA 까다로운 도구를 사용하는 것이 좋습니다 당신은 아마 외부 테이블 빠른 결과를 얻을 것, (SQL * Loader는 모든 Oracle 인스턴스에 연결할 수 있지만 파일은 Oracle Server 시스템에 있어야합니다.)