2012-07-17 55 views
0

我有一個任務將一個表的數據導出到平面文件中。我寫了一個shell腳本來執行相同的操作。這裏的問題是在第一個列值之後,即310,光標不會按空格移動空間,我認爲它需要一個「標籤」。它跳到某個位置。 我無法理解這一點。你能幫我解決這個問題嗎?通過刪除標籤並將其作爲空格。Shell腳本/ sql * loader - 製表符代替輸出文件中的空格

trimspool ON或Linesize是否導致問題?

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 

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

我的控制文件和shell腳本如下。

控制文件::

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) 
) 

=================================== ================================================= Shell腳本::

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以避免線路上出現空格;因爲你沒有做spoolset trimspool可能沒有做任何事情。

+0

非常感謝Alex。這解決了該選項卡的問題。 :-)但是我現在陷入另一個問題,那就是lineize。 :(如果我將修剪輸出設置爲ON,它修剪尾部空白,它將修剪空格,它們是最後一個字段中數據的一部分。:(可以設置linesize來取代數據的大小設置爲200或500,這可能會操縱數據? – Savitha 2012-07-17 10:56:39

+0

@Savitha - 不,但是如果你在控制文件中使用固定寬度的列,那麼我認爲你可以讓'linesize'大於你需要的大小,並刪除儘管如果它是固定的列大小,它應該是一個固定的行長度,你可以準確地設置,也許。無論哪種方式,我不認爲控制文件會介意額外的尾隨空格(但它已經有一段時間了) 。 – 2012-07-17 11:03:17