我有一個任務將一個表的數據導出到平面文件中。我寫了一個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
非常感謝Alex。這解決了該選項卡的問題。 :-)但是我現在陷入另一個問題,那就是lineize。 :(如果我將修剪輸出設置爲ON,它修剪尾部空白,它將修剪空格,它們是最後一個字段中數據的一部分。:(可以設置linesize來取代數據的大小設置爲200或500,這可能會操縱數據? – Savitha 2012-07-17 10:56:39
@Savitha - 不,但是如果你在控制文件中使用固定寬度的列,那麼我認爲你可以讓'linesize'大於你需要的大小,並刪除儘管如果它是固定的列大小,它應該是一個固定的行長度,你可以準確地設置,也許。無論哪種方式,我不認爲控制文件會介意額外的尾隨空格(但它已經有一段時間了) 。 – 2012-07-17 11:03:17