⇧ amazing...
ただ、フライドポテトを食べる頻度が多いと死亡リスクが高まるとか...
⇧「じゃがいも」自体が良くないってのは衝撃...
SQL*LoaderとOracle SQLcl (SQL Developer Command Line)
Oracle DatabaseのテーブルにCSVファイルからデータをINSERTする方法にはどんなものがあるのか?
公式のドキュメントによりますと、
2.1.1 CSVファイルからのデータのインポート
Oracle SQL DeveloperまたはOracle Databaseユーティリティ(SQL*Loaderや外部表など)を使用して、CSVファイルのデータをデータベースにインポートできます。
-
ファイルから表にデータをインポートする方法については、Oracle SQL Developerユーザーズ・ガイドのデータ・インポート・ウィザードを参照してください。
- データ転送ユーティリティの詳細は、Oracle Databaseユーティリティを参照してください。
https://docs.oracle.com/cd/F58864_01/spgdg/importing-data-csv-files.html
次に、次のステップを実行してデータをロードします。
load data
infile '<path_to_bank_nodes.csv>'
into table bank_accounts
fields terminated by "," optionally enclosed by '"'
( id, name )
https://docs.oracle.com/cd/F58864_01/spgdg/importing-data-csv-files.html
sqlldr <dbuser>/<password> CONTROL=<path_to_vertex_loader.ctl>
https://docs.oracle.com/cd/F58864_01/spgdg/importing-data-csv-files.html
⇧ Oracle Database特有の方法が用意されてるらしい。
何でも、「load data」コマンドってものが用意されてるよう。
なんだけど、
Enter the LOAD command to load the data from a CSV file after creating the table.
load bank_accounts bankgraphdataset/bank_accounts.csv new ;
⇧ Oracleの公式のブログの情報だと、「load」コマンドなるものもあるらしい。
2.10 Loading a File
Use the LOAD
command in SQLcl to load a comma-separated value file from a local directory or cloud storage location into a table.
https://docs.oracle.com/en/database/oracle/sql-developer-command-line/22.3/sqcug/loading-file.html
2.11.1 LOAD Command
Loads a comma-separated value (csv) file from a local directory or cloud storage location into a table.
Syntax
LOAD [TABLE] [schema.]table_name { <file-specification> | <cloud-storage-specification> }
[NEW | SHOW | SHOW_DDL | CREATE |CREATE_DDL]
https://docs.oracle.com/en/database/oracle/sql-developer-command-line/23.1/sqcug/loading-file.html
⇧ とある。
確認出来た限りの情報で整理すると、Oracle Databaseのみでしか利用できないけど、
の2つの方法が用意されてるらしいですと。
他にも方法があるのかも知れないですが、相変わらず、Oracleさんのドキュメントが把握し辛いので、何とも言えませんな...
で、「Oracle SQLcl (SQL Developer Command Line)」がデフォルトで使えると思いきや、「Oracle Preinstallation RPM」でOracle Databaseをインストールしている場合は、
3.12.11.1.1 Downloading and Installing SQLcl
Download and install Oracle SQL Developer Command Line (SQLcl) for free.
⇧ 別途インストールする必要があるらしい...
ちなみに、Oracleさん、
⇧ 『SQLclはSQL Developerに付属しており、SQL DeveloperはすべてのOracle Databaseのインストールに同梱されています。つまり、SQLclはOracle Databaseに付属しています。』って、また、平気で嘘を付く...
残念ながら、
⇧「Oracle Cloud Infrastructure (OCI)」以外の環境は、dnfによるインストールに対応してないっぽい。
試しに、「WSL 2(Windows SubSystem for Linux 2)」の「Oracle Linux 8.7」で試してみたところ、
⇧ 見つからないと怒られました...
「Oracle SQLcl (SQL Developer Command Line)」をインストールする
致し方ないので、普通にダウンロードしてインストールするようにしました。
まずは、ダウンロード。
wget https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
展開先の説明がドキュメントに無いので、展開先はどこでも良いってことかね?
とりあえず、展開。
unzip sqlcl-latest.zip
⇧ Linux環境だと「./sqlcl/bin/sql」が実行ファイルってことになるみたい。
これだと、rootユーザーでしか実行できないことになりそうなんだけど、本当に展開先どこでも良いんかね?
Oracle DatabaseのテーブルにCSVファイルからのデータをINSERTする
INSERT対象のテーブルは、
⇧ 上記の記事で作成した「W_M_FACILITY」テーブルで。
CSVファイルを作成。
FFACILITY_CODE,FACILITY_CLASS,FACILITY_NAME,ADDRESS,TEL,CREATE_TIME,UPDATE_TIME 001,H,パークハイアット東京,163-1055東京都新宿西新宿3-7-1-2,0353221234,2023/06/11 00:00:00,2023/06/11 00:00:00 002,H,コンラッド東京,160-0023東京都新宿区西新宿2-2-1,0363888000,2023/06/11 00:00:00,2023/06/11 00:00:00 003,H,京王プラザホテル,163-1055東京都新宿西新宿3-7-1-2,0333440111,2023/06/11 00:00:00,2023/06/11 00:00:00 004,H,ホテルニューオータニ,102-0094東京都千代田区紀尾井町4-1,0332651111,2023/06/11 00:00:00,2023/06/11 00:00:00
「WinSCP」で「WSL 2(Windows SubSystem for Linux 2)」の「Oracle Linux 8.7」へCSVファイルをアップロードします。
で、実行するも、
⇧ パスの問題で怒られる...
Oracle Database 23c(Free – Developer Release)で利用してるっぽい、JDKを指定してみたところ、
⇧ まさかのJava 8を使っていると...
Java 11をインストール。
dnf -y install java-11-openjdk java-11-openjdk-devel
Oracle Databaseの環境変数も設定しておく必要があったっぽい。
で、接続して、CSVファイルからINSERTしてみる。
テーブル作成済みの場合は、引数のnewが不要だったようです。
INSERTされました。
同じCSVファイルを読み込んでINSERTを試みたところ、
一意制約エラーになりました。
もし、テーブルに主キーとか設定されていないのであれば、重複データが登録されることになるってことかね。
何と言うか、Oracleの情報は嘘情報が多いのが辛い...
一次情報が信用できないのは厳しい...
毎度モヤモヤ感が半端ない...
今回はこのへんで。