Oracleの場合、以下の記事の「spoolコマンドによるCSVファイル出力」に記載のsqlplusコマンドを利用することで、SQLファイルに記載したSQL文の実行が行えるが、他のDBにおいても同様の処理を行うことができる。
今回は、Oracle, MySQL, PostgreSQL, SQL Serverの各DBにおいて、ファイル内のSQL文をコマンドで実行してみたので、その手順を共有する。
前提条件
下記記事のように、A5M2を利用して各DBに接続できていること。
やってみたこと
Oracleの場合の実行結果
Oracleの場合の実行結果は以下の通りで、sqlplusコマンドを利用することで、SQLファイルに記載したDML文が実行できることが確認できる。
2) コマンドプロンプトを起動し、sqlplusコマンドの配置されているディレクトリに移動する。
1 2 | cd C:\oraclexe\app\oracle\product\11.2.0\server\bin dir sqlplus.exe |
なお、以下の「sqlplus.exe」が、sqlplusコマンドになる。
3) 以下のように、user_dataテーブルを更新するためのSQLファイルを、「C:\tmp\update_memo.sql」に配置する。
なお、このファイル内のexitコマンドは、sqlplusコマンドでOracleに接続しSQLを実行した後に、自動的にOracleから切断できるようにするために必要となる。
4) sqlplusコマンドを利用して、3)のSQLファイルの内容に従って、データ更新を行う。
1 | sqlplus USER01/USER01@xe @C:\tmp\update_memo.sql |
なお、sqlplusコマンドは、「sqlplus (ユーザー名)/(パスワード)@(接続文字列) @(実行するSQLファイルパス)」という形式で指定している。
5) Oracleのデータを確認すると、SQLファイルに記載した内容に従ってデータ更新されていることが確認できる。
MySQLの場合の実行結果
MySQLの場合の実行結果は以下の通りで、mysqlコマンドを利用することで、SQLファイルに記載したDML文が実行できることが確認できる。
2) コマンドプロンプトを起動し、mysqlコマンドの配置されているディレクトリに移動する。
1 2 | cd C:\Program Files\MySQL\MySQL Server 8.0\bin dir mysql.exe |
なお、以下の「mysql.exe」が、sqlplusコマンドになる。
3) 以下のように、user_dataテーブルを更新するためのSQLファイルを、「C:\tmp\update_memo.sql」に配置する。
4) mysqlコマンドを利用して、3)のSQLファイルの内容に従って、データ更新を行う。
1 | mysql -h localhost -u USER01 -pUSER01 -D user01 < C:\tmp\update_memo.sql |
なお、mysqlコマンドは、「mysql -h (ホスト名) -u (ユーザー名) -p(パスワード) -D (データベース名) (実行するSQLファイルパス)」という形式で指定している。
また、mysqlコマンド実行時に、警告「Warning: Using a password on the command line interface can be insecure.」が表示されるが、これはバージョン5.6以上のMySQL上で、mysqlコマンドをパスワード指定して実行する場合に表示される警告で、データ更新は問題なく行うことができる。
この警告についての説明は、以下のサイトを参照のこと。
https://beyondjapan.com/blog/2016/08/mysql56-warning/
5) MySQLのデータを確認すると、SQLファイルに記載した内容に従ってデータ更新されていることが確認できる。
PostgreSQLの場合の実行結果
PostgreSQLの場合の実行結果は以下の通りで、psqlコマンドを利用することで、SQLファイルに記載したDML文が実行できることが確認できる。
1) PostgreSQLに、以下のデータが入っている状態とする。
2) コマンドプロンプトを起動し、psqlコマンドの配置されているディレクトリに移動する。
1 2 | cd C:\Program Files\PostgreSQL\13\bin dir psql.exe |
なお、以下の「psql.exe」が、psqlコマンドになる。
3) 以下のように、user_dataテーブルを更新するためのSQLファイルを、「C:\tmp\update_memo.sql」に配置する。
4) psqlコマンドを利用して、3)のSQLファイルの内容に従って、データ更新を行う。
1 2 | set PGPASSWORD=USER01 psql -h localhost -U USER01 -d USER01 -f C:\tmp\update_memo.sql |
なお、psqlコマンドは、「psql -h (ホスト名) -U (ユーザー名) -d (データベース名) -f (実行するSQLファイルパス)」という形式で指定している。また、「SET PGPASSWORD=(パスワード)」という記載で、psqlコマンドで接続する際のパスワードを設定している。
5) PostgreSQLのデータを確認すると、SQLファイルに記載した内容に従ってデータ更新されていることが確認できる。
SQL Serverの場合の実行結果
SQL Serverの場合の実行結果は以下の通りで、sqlcmdコマンドを利用することで、SQLファイルに記載したDML文が実行できることが確認できる。
1) SQL Serverに、以下のデータが入っている状態とする。
2) コマンドプロンプトを起動し、sqlcmdコマンドの配置されているディレクトリに移動する。
1 2 | cd C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn dir SQLCMD.EXE |
なお、以下の「SQLCMD.exe」が、sqlcmdコマンドになる。
3) 以下のように、user_dataテーブルを更新するためのSQLファイルを、「C:\tmp\update_memo.sql」に配置する。
4) sqlcmdコマンドを利用して、3)のSQLファイルの内容に従って、データ更新を行う。
1 | sqlcmd -S localhost -U USER01 -P USER01 -d master -i "C:\tmp\update_memo.sql" |
なお、sqlcmdコマンドは、「sqlcmd -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名) -i (実行するSQLファイルパス)」という形式で指定している。
5) SQL Serverのデータを確認すると、SQLファイルに記載した内容に従ってデータ更新されていることが確認できる。
要点まとめ
- Oracle, MySQL, PostgreSQL, SQL Serverの各DBにおいて、ファイル内のSQL文をコマンドで実行することができる。その際に利用するコマンドは、Oracleの場合はsqlplus、MySQLの場合はmysql、PostgreSQLの場合はpsql、SQL Serverの場合はsqlcmdとなる。