web-dev-qa-db-ja.com

Oracle:CSVファイルのインポート

私は今しばらく探していますが、答えが見つからないようですので、ここに行きます...

Oracle(9i/10i)のテーブルにインポートしたいCSVファイルがあります。

後で、このテーブルを別の用途のルックアップとして使用する予定です。

これは実際に私が取り組んでいる回避策です。なぜなら、1000を超える値を持つIN句を使用してクエリを実行することは不可能だからです。

これはSQLPLUSを使用してどのように行われますか?

御時間ありがとうございます! :)

24
cr8ivecodesmith

SQL Loaderは、csvファイルをテーブルにロードするのに役立ちます: SQL * Loader

Sqlplusのみが必要な場合は、少し複雑になります。 sqlloaderスクリプトとcsvファイルを見つけて、sqlldrコマンドを実行する必要があります。

21
Abi

使用できるもう1つのソリューションは、SQL Developerです。

これにより、csvファイルからインポートすることができます(他の区切りファイルが利用可能です)。

テーブルビューを開いて、次の操作を行います。

  • アクションを選択する
  • データをインポートする
  • あなたのファイルを見つける
  • オプションを選択してください。

SQL Developerに挿入を実行させるオプション、sql挿入スクリプトを作成するオプション、またはSQLローダー・スクリプトのデータを作成するオプションがあります(自分でこのオプションを試したことはありません)。

もちろん、コマンドラインのみを使用できる場合はすべてが意味がありませんが、SQL Developerでローカルにテストできる場合は、生成された挿入スクリプト(たとえば)をいつでもデプロイできます。

2つの既に非常に良い答えに別のオプションを追加するだけです。

21
Clarkey

別の解決策は、外部テーブルを使用することです: http://www.orafaq.com/node/848

このインポートを非常に頻繁に非常に高速に実行する必要がある場合に使用します。

5
TTT

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 userid/passwd @ DBname control =例:sqlldr abc/xyz @ ora control = load.ctl

それが役に立てば幸い。

4
arjun gaur

誰かが フレームワーク へのリンクを投稿するように頼みました!これはOpen World 2012で発表したものです。これは、外部テーブルを使用してソリューションを設計する方法を示す完全なブログ投稿です。

3

Oracle 18cから インライン外部テーブル を使用できます。

インライン外部テーブルは、外部テーブルをデータディクショナリ内の永続オブジェクトとして作成せずに、SQLステートメントの一部として外部テーブルのランタイム定義を有効にします。

インライン外部テーブルでは、CREATE TABLEステートメントで外部テーブルを作成するために使用されるものと同じ構文を、実行時のSELECTステートメントで使用できます。クエリブロックの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;
2
Lukasz Szozda