2011-06-01 95 views
19

我一直在尋找了一段時間,但似乎無法使這裏找到答案去...甲骨文:導入CSV文件

我已經得到了我想要導入到表中的CSV文件在Oracle(9i/10i)中。

後來我打算將此表用作其他用途的查找。

這實際上是一個我正在處理的解決方法,因爲使用IN子句查詢1000個以上的值是不可能的。

這是如何使用SQLPLUS完成的?

謝謝你的時間! :)

+0

您應該使用聯接而不是IN子句。 – MikeKulls 2013-07-18 03:48:01

+1

「您應該使用聯接而不是IN子句。」 ...您通過首先將csv導入到Oracle中來執行此操作。 – 2017-04-19 19:22:15

回答

18

SQL裝載機幫助負載CSV文件導入表:SQL*Loader

如果你想只的sqlplus,那麼它變得有點複雜。您需要找到您的sqlloader腳本和csv文件,然後運行sqlldr命令。

+1

你說得對。一些更多的研究讓我意識到SQL Loader是解決這個問題的方法。謝謝! – cr8ivecodesmith 2011-06-01 10:04:20

4

另一種解決方案是使用外部表:當你要經常和非常快速的做進口http://www.orafaq.com/node/848

使用此。

+0

感謝您的跟進。 :) – cr8ivecodesmith 2011-06-02 01:10:54

+0

另一個鏈接:http://www.orafaq.com/wiki/External_table – Vadzim 2014-10-23 17:06:42

20

您可以使用的另一個解決方案是SQL Developer。

有了它,您就可以從csv文件導入(其他分隔文件可用)。

只要打開表視圖,然後:

  • 選擇行動
  • 進口數據
  • 找到你的文件
  • 選擇您的選項。

您可以選擇讓SQL Developer爲您執行插入操作,創建SQL插入腳本或爲SQL Loader腳本創建數據(本人未嘗試使用此選項)。

當然,如果您只能使用命令行,所有這些都沒有意義,但是如果您可以在本地使用SQL Developer進行測試,則可以始終部署生成的插入腳本(例如)。

只需向2個已經非常好的答案添加另一個選項即可。

+0

有關如何使用SQL Developer嚮導準備SQL Loader腳本和控制文件的詳細文章:http://www.thatjeffsmith.com/archive/2012/08 /使用Oracle的-SQL顯影劑到設置-SQLLOADER遊程/ – Vadzim 2014-12-20 19:38:49

3

有人讓我發佈一個鏈接到the framework!我在2012年世界開放大會上發佈了這篇文章。這是一篇完整的博客文章,演示瞭如何用外部表格構建解決方案。

4

SQL Loader是要走的路。 我最近從一個csv文件加載我的表,這個新概念,想分享一個例子。

LOAD DATA 
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv' 
    REPLACE 
    INTO TABLE LOAN_BALANCE_MASTER_INT 
    fields terminated by ',' optionally enclosed by '"' 
    (
    ACCOUNT_NO, 
    CUSTOMER_NAME, 
    LIMIT, 
    REGION 

    ) 

地控制文件和CSV在服務器上的相同位置。 找到sqlldr exe文件並進行註冊。

SQLLDR用戶名/ passwd文件@數據庫名稱控制= 例如:SQLLDR ABC/XYZ @ ORA控制= load.ctl

希望它能幫助。

0

Oracle 18c你可以使用Inline External Tables

內嵌外部表允許外部表的定義運行時作爲SQL語句的一部分,無需在數據字典中創建外部表作爲持久化對象。

使用內聯外部表時,可以在運行時在SELECT語句中使用與使用CREATE TABLE語句創建外部表相同的語法。在查詢塊的FROM子句中指定內聯外部表。包含嵌入式外部表的查詢還可以包含用於連接,聚合等的常規表。

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold) 
SELECT time_id, prod_id, quantity_sold, amount_sold 
FROM EXTERNAL ( 
    (time_id  DATE NOT NULL,  
    prod_id  INTEGER NOT NULL, 
    quantity_sold NUMBER(10,2), 
    amount_sold NUMBER(10,2))  
    TYPE ORACLE_LOADER  
    DEFAULT DIRECTORY data_dir1 
    ACCESS PARAMETERS (
     RECORDS DELIMITED BY NEWLINE 
     FIELDS TERMINATED BY '|')  
    LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external;