2012-03-30 76 views
8

我最初在超級用戶上問過這個問題,但有人建議我在這裏重新發布。在Oracle中導入CSV數據(嘗試Apex/SQL Developer)

我正在使用最新版本的APEX(4.1.1)和Oracle(11.2.0.3)。我上傳CSV數據到一組表格。 我一直在嘗試它,並遇到一些我從未見過的問題。

作爲一個例子,我試圖將數據導入到該表中:

CREATE TABLE SW_ENGINEER 
    (ENGINEER_NO VARCHAR2(10), 
      ENGINEER_NAME VARCHAR2(50), 
      CONSTRAINT SW_ENG_PK PRIMARY KEY (ENGINEER_NO)) 

它無法在這個簡化的數據子集:

call log no,contract_no,call date,agreed date,agreed time,actual arrive,engineer no,engineer name,equipment code,cust desc,eng desc 
a,b,c,22-Mar-06,1,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,22-Mar-06,2,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,19-Mar-06,3,19/03/2006 09:15,351,Rory Juarez,d,e,f 

(它無法在更大的數據集相同的方式) 我不能與任何APEX或SQL Developer中加載它,如下所示:

  • APEX:隨着APEX數據工作購物,導入文本,加載現有表格,使用逗號分隔,選擇表格和文件,勾選'標題行'複選框,我們的列映射表單顯示正確的數據。然後將除engineer_no和engineer_name之外的所有列設置爲「否」,然後單擊Load Data。

這似乎工作,並顯示在文本數據加載存儲庫中的彙總行,但在檢查它已加載0行和79失敗。點擊79表示他們都遭受「ORA-01008:並非所有變量都綁定」。所選列對我來說看起來不錯,所以我想知道它是否還包括其他一些,儘管「否」設置?

如果我在上傳之前編輯csv以刪除不相關的列,則不會發生此問題,但如果我可以使用列映射,則會更容易。

  • SQL開發人員:在SD使用導入數據嚮導,我發現,除非標題行被選中它不會發展成列映射(?按鈕已啓用,但不工作 - 爲什麼不), - 但是如果它被檢查(在這種情況下正確),那麼驗證步驟失敗,因爲「表格列工程師沒有足夠大......」。

我發現可以通過從csv文件列中刪除標題值來克服。所以看起來,設置標題行復選框實際上並不會導致它忽略標題行,並且它是導致錯誤的標題值'engineer-no'。這對我來說不太合適。 我過去曾使用過這兩種方法,但我想知道最近的升級是否與此有關。

任何想法?還是我錯過了明顯的東西?

+1

csv文件中的任何字段中是否有','? – MatBailie 2012-03-30 10:43:09

+0

是的,但之後它們被引用「like,this」 – boisvert 2012-03-30 10:44:37

+1

您是否測試過簡單1或2行的csv沒有這樣的字段,另外1行或2行的csv有這樣的字段?如果前者失敗了,你就會遇到更大的問題,如果前者成功,後者失敗,你就隔離了這個問題。在你的數據中還有一些其他的特性,用Excel或其他軟件分析它 – MatBailie 2012-03-30 10:46:31

回答

2

我的一位同事認爲這(不完全滿意)解決方案:

,如果你需要的列都在開始時,它的工作原理,這樣的:

engineer no,engineer name,equipment code,cust desc,eng desc,call log no,contract_no,call date,agreed date,agreed time,actual arrive 
654,Flynn Hobbs,d,e,f,a,b,c,22-Mar-06,1,23/03/2006 15:00 
654,Flynn Hobbs,d,e,f,a,b,c,22-Mar-06,2,23/03/2006 15:00 
351,Rory Juarez,d,e,f,a,b,c,19-Mar-06,3,19/03/2006 09:15 

所以它看起來像一個APEX文本導入中包含YES/NO功能的錯誤?

0

在CSV

call log no,contract_no,call date,agreed date,agreed time,actual arrive,engineer no,engineer name,equipment code,cust desc,eng desc 
a,b,c,22-Mar-06,1,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,22-Mar-06,2,23/03/2006 15:00,654,Flynn Hobbs,d,e,f 
a,b,c,19-Mar-06,3,19/03/2006 09:15,351,Rory Juarez,d,e,f 

你有11個欄目,並嘗試將其導入在3列。

  1. 如果您在CSV有「你768,16將它們全部刪除。
  2. 您必須表正好11列這個CSV。
  3. 在表中的每一列可能具有正確的數據類型。
  4. 在CSV中,每一個都是一個列分隔符
0

我不太清楚爲什麼它不適合你。對於我來說,使用Apex Data Workshop進行復制和粘貼,效果很好。 )

當然,我只能上傳這三個結果中的兩個,其中一個具有重複的ID值。但它的工作。 PS:對於可能具有','作爲行的列值的一部分的較大數據集,請考慮使用「可選封閉選項」選項(使用雙引號(「)」上傳嚮導,它將整個值視爲一個值