테이블의 데이터를 플랫 파일로 내보내는 작업이 있습니다. 동일한 작업을 수행하기 위해 쉘 스크립트를 작성했습니다. 여기서 문제는 첫 번째 열 값 (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
Alex 대단히 감사합니다. 탭에서 문제가 해결되었습니다. :-)하지만 지금은 다른 문제에 갇혀 있습니다. :(후미 공백을 다듬는 트리밍을 ON으로 설정하면, 마지막 필드의 데이터 부분 인 공백을 자르고 있습니다. :(대신 선 크기를 사용하여 데이터 크기를 취할 수 있습니까? 데이터를 조작 할 수있는 200 또는 500으로 설정합니까? – Savitha
@Savitha - 아니요. 그러나 제어 파일에서 고정 폭 열을 사용하는 경우에는 필요 이상의 것보다'linesize'를 더 크게 만들 수 있다고 생각합니다. 'trimout off'입니다. 고정 열 크기 인 경우, 고정 길이로 정확하게 설정할 수 있습니다. 어쨌든 제어 파일이 여분의 후행 공백을 신경 쓰지 않을 것이라고 생각합니다 (그러나 잠시있었습니다) . –