2013-04-13 30 views
0

這是一個瘋狂的問題:相同的外部表定義在一個 數據庫中正常工作,但在另一箇中失敗。不是模式 - 數據庫。兩個數據庫,在同一個OS上的兩個 ,不同的服務器上。另外,它在第二個日期 字段上失敗,雖然兩者定義相同。兩個服務器上的NLS設置是相同的,我認爲日期掩碼應該覆蓋這個。這裏的定義是:Oracle外部表日期字段 - 在一個數據庫中工作,而不在另一個數據庫中

-- access parameters 
-- http://docs.oracle.com/cd/E11882_01/server.112/e16536/et_params.htm 

CREATE TABLE ext_tab (
    FIELD1     VARCHAR2(30), 
    FIELD2_DATE    DATE, 
    FIELD3     VARCHAR2(4), 
    FIELD4     VARCHAR2(6), 
    FIELD5_DATE    DATE 
) 
ORGANIZATION EXTERNAL 
    (TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY DIR_DATADIR 
    ACCESS PARAMETERS 
     (RECORDS DELIMITED BY NEWLINE 
     NOBADFILE 
     NODISCARDFILE 
     LOGFILE 'LOGFILE_LOG' 
     FIELDS 
      TERMINATED BY ',' 
      OPTIONALLY ENCLOSED BY '"' and '"' 
      LRTRIM 
      MISSING FIELD VALUES ARE NULL 
      REJECT ROWS WITH ALL NULL FIELDS 
      (
    FIELD1     CHAR(30), 
    FIELD2_DATE    CHAR(8) date_format DATE mask 'YYYYMMDD', 
    FIELD3     CHAR(4), 
    FIELD4     CHAR(6), 
    FIELD5_DATE    CHAR(8) date_format DATE mask 'YYYYMMDD' 
     ) 
    ) 
    LOCATION ('Sample_Input_csv.csv') 
) 
REJECT LIMIT UNLIMITED 
NOPARALLEL; 

這裏的樣本數據:

TOTEA01217611,20121122,TOTE,847759,20121122 

而且,日誌錯誤:

KUP-04021: field formatting error for field FIELD5_DATE 

KUP-04026:場太長數據類型

任何人有這個瘋狂的答案?

回答

0

顯然,輸入文件以某種方式損壞,可能是以二進制而非ASCII加載的。

我們做了什麼: - 從第一臺服務器上拉另一個文件到第二臺服務器並測試 - 這一個工作正常! - 刪除第二個文件的內容,並將第一個文件中的確切文本直接剪切並粘貼到第二個文件中 - 再次運行測試 - 工作正常!

就我們所知,在這兩個文件之間的所有內容都是相同的。爲了排除與文件名有關的問題,我們將該文件重命名爲原始文件的名稱,但仍然有效。然後,我們重新FTP了原始文件,並且這次也運行了。因此,我們唯一能想到的是,文件中有一些非打印字符。

我們沒有可用的十六進制編輯器進行檢查,但對於任何遇到同樣的事情的人來說,查看內容爲十六進制將是確保文件中沒有任何奇怪的一種方法。

相關問題