2012-07-17 2 views
0

테이블의 데이터를 플랫 파일로 내보내는 작업이 있습니다. 동일한 작업을 수행하기 위해 쉘 스크립트를 작성했습니다. 여기서 문제는 첫 번째 열 값 (310) 이후에 커서가 공백으로 공간을 이동시키지 않는다는 것입니다. 필자가 생각하기에 "탭"이 필요합니다. 그것은 특정 위치를 점프. 나는 이것을 이해할 수 없다. 탭을 제거하고 공백으로 가져 가서이 문제를 해결하도록 도와주십시오.쉘 스크립트/sql * loader - 출력 파일의 공백 대신 탭

trimspool이 켜져 있습니까? 아니면 문제를 일으키는 선이 있습니까?

310 LIFRZONAAC 0000000 0000003 
310 LIIPACCCLA 0000000 0000000 
310 LIIPACREPL 0000000 0000000 
310 LIIPANRDSI 0000000 0000000 
310 LIIPAXNAD 0000000 0000000 
310 LIIPBNRDSI 0000000 0000000 
310 LIIPCAUDIP 0000000 0000000 
310 LIIPCAUDMU 0000000 0000000 

=========================================== =========================

내 제어 파일 및 셸 스크립트는 다음과 같습니다.

제어 파일 :

LOAD DATA CHARACTERSET WE8ISO8859P1 

APPEND 
PRESERVE BLANKS 
INTO TABLE "MNCABEA1" 
APPEND 
(
SERVICIO    CHAR(9), 
FAMILIA_COMPONENTE CHAR(4), 
PARAMETRO    CHAR(7), 
CO_CABECERA_SC  CHAR(8), 
CO_CABECERA_CARACT CHAR(7) 
) 

=================================== =================================== 쉘 스크립트 ::

cat<<ENDMNCABEA1 >MNCABEA1.sql 
set head off 
set feed off 
set pagesize 0 
set trimspool on 
set linesize 500 

SELECT SERVICIO||FAMILIA_COMPONENTE||PARAMETRO||DECODE(CO_CABECERA_SC,'  ',REPLACE(CO_CABECERA_SC,' ','0'),LPAD(LTRIM(CO_CABECERA_SC),8,'0'))||DECODE(CO_CABECERA_CARACT,'  ',REPLACE(CO_CABECERA_CARACT,' ','0'),LPAD(LTRIM(CO_CABECERA_CARACT),7,'0')) FROM MNCABEA1; 

exit 
ENDMNCABEA1 

sqlplus -s [email protected]$ORACLE_SID @MNCABEA1.sql > /var/opt/aat/shr/mn/par/ext/salida/MNCABEA1_TEST 

답변

0

너는 또한 set tab off; the documentation을 참조하십시오. 줄에 공백이 오는 것을 피하려면 set trimout off을 원할 수도 있습니다. spool을 수행하지 않으므로 set trimspool은 아마 아무 것도하지 않습니다.

+0

Alex 대단히 감사합니다. 탭에서 문제가 해결되었습니다. :-)하지만 지금은 다른 문제에 갇혀 있습니다. :(후미 공백을 다듬는 트리밍을 ON으로 설정하면, 마지막 필드의 데이터 부분 인 공백을 자르고 있습니다. :(대신 선 크기를 사용하여 데이터 크기를 취할 수 있습니까? 데이터를 조작 할 수있는 200 또는 500으로 설정합니까? – Savitha

+0

@Savitha - 아니요. 그러나 제어 파일에서 고정 폭 열을 사용하는 경우에는 필요 이상의 것보다'linesize'를 더 크게 만들 수 있다고 생각합니다. 'trimout off'입니다. 고정 열 크기 인 경우, 고정 길이로 정확하게 설정할 수 있습니다. 어쨌든 제어 파일이 여분의 후행 공백을 신경 쓰지 않을 것이라고 생각합니다 (그러나 잠시있었습니다) . –