私は今しばらく探していますが、答えが見つからないようですので、ここに行きます...
Oracle(9i/10i)のテーブルにインポートしたいCSVファイルがあります。
後で、このテーブルを別の用途のルックアップとして使用する予定です。
これは実際に私が取り組んでいる回避策です。なぜなら、1000を超える値を持つIN句を使用してクエリを実行することは不可能だからです。
これはSQLPLUSを使用してどのように行われますか?
御時間ありがとうございます! :)
SQL Loaderは、csvファイルをテーブルにロードするのに役立ちます: SQL * Loader
Sqlplusのみが必要な場合は、少し複雑になります。 sqlloaderスクリプトとcsvファイルを見つけて、sqlldrコマンドを実行する必要があります。
使用できるもう1つのソリューションは、SQL Developerです。
これにより、csvファイルからインポートすることができます(他の区切りファイルが利用可能です)。
テーブルビューを開いて、次の操作を行います。
SQL Developerに挿入を実行させるオプション、sql挿入スクリプトを作成するオプション、またはSQLローダー・スクリプトのデータを作成するオプションがあります(自分でこのオプションを試したことはありません)。
もちろん、コマンドラインのみを使用できる場合はすべてが意味がありませんが、SQL Developerでローカルにテストできる場合は、生成された挿入スクリプト(たとえば)をいつでもデプロイできます。
2つの既に非常に良い答えに別のオプションを追加するだけです。
別の解決策は、外部テーブルを使用することです: http://www.orafaq.com/node/848
このインポートを非常に頻繁に非常に高速に実行する必要がある場合に使用します。
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
それが役に立てば幸い。
誰かが フレームワーク へのリンクを投稿するように頼みました!これはOpen World 2012で発表したものです。これは、外部テーブルを使用してソリューションを設計する方法を示す完全なブログ投稿です。
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;