私はしばらく探していましたが、答えが見つからないようですので、ここに行きます...
Oracle(9i / 10i)のテーブルにインポートしたいCSVファイルがあります。
後で、このテーブルを別の用途のルックアップとして使用する予定です。
1000を超える値を持つIN句を使用してクエリを実行することはできないため、これは実際に私が取り組んでいる回避策です。
これはSQLPLUSを使用してどのように行われますか?
御時間ありがとうございます!:)
私はしばらく探していましたが、答えが見つからないようですので、ここに行きます...
Oracle(9i / 10i)のテーブルにインポートしたいCSVファイルがあります。
後で、このテーブルを別の用途のルックアップとして使用する予定です。
1000を超える値を持つIN句を使用してクエリを実行することはできないため、これは実際に私が取り組んでいる回避策です。
これはSQLPLUSを使用してどのように行われますか?
御時間ありがとうございます!:)
SQLローダーはcsvファイルをテーブルにロードするのに役立ちます:SQL * Loader
sqlplusのみが必要な場合は、少し複雑になります。sqlloaderスクリプトとcsvファイルを見つけて、sqlldrコマンドを実行する必要があります。
使用できるもう1つのソリューションは、SQLDeveloperです。
これを使用すると、csvファイルからインポートすることができます(他の区切られたファイルが利用可能です)。
テーブルビューを開いて、次のようにします。
SQL Developerに挿入を実行させる、SQL挿入スクリプトを作成する、またはSQLローダースクリプトのデータを作成するオプションがあります(このオプションを自分で試したことはありません)。
もちろん、コマンドラインしか使用できない場合は問題ありませんが、SQL Developerを使用してローカルでテストできる場合は、生成された挿入スクリプトをいつでも展開できます(たとえば)。
すでに非常に良い2つの答えに別のオプションを追加するだけです。
別の解決策は、外部テーブルを使用することです:http ://www.orafaq.com/node/848
このインポートを非常に頻繁かつ非常に高速に実行する必要がある場合は、これを使用します。
SQLローダーはその方法です。最近、この概念に新しい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;
2つのヒントを共有したいと思います:(ヒント1)csvファイルを作成します(ヒント2)csvファイルからテーブルに行をロードします。
==== [(ヒント1)Oracleテーブルからcsvファイルを作成するSQLPLUS] ====
次のコマンドでSQLPLUSを使用します。
set markup csv on
set lines 1000
set pagesize 100000 linesize 1000
set feedback off
set trimspool on
spool /MyFolderAndFilename.csv
Select * from MYschema.MYTABLE where MyWhereConditions ;
spool off
exit
====[ヒント2csvファイルをテーブルにロードするためのSQLLDR]====
SQLLDRとcsv(コンマ区切り)ファイルを使用して、csvファイルからテーブルに行を追加(APPEND)します。ファイルには、フィールド間テキストフィールドには「テキストの前後に」がありますCRITICAL:最後の列がnullの場合、行の終わりに、があります
csvファイルのデータ行の例:
11,"aa",1001
22,"bb',2002
33,"cc",
44,"dd",4004
55,"ee',
これは制御ファイルです:
LOAD DATA
APPEND
INTO TABLE MYSCHEMA.MYTABLE
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
(
CoulmnName1,
CoulmnName2,
CoulmnName3
)
これは、Linuxでsqlldrを実行するためのコマンドです。Windowsで実行する場合は、/cの代わりに\を使用してください。
sqlldr userid=MyOracleUser/MyOraclePassword@MyOracleServerIPaddress:port/MyOracleSIDorService DATA=datafile.csv CONTROL=controlfile.ctl LOG=logfile.log BAD=notloadedrows.bad
幸運を !