PowerShellを使ってOracleのSQLの実行結果を取得する簡単な方法
PowerShellを使ってOracleのSQLを実行し、結果を取得したい!
Windows Server上にインストールしたOracleデータベースに対し、PowerShellを使って何らかのSQLを実行。
そして、その結果を取得したい!という場合があります。
これはもちろん可能であり、いくつかの方法で対応することが可能です。
今回はその中でも、特にシンプルかつ簡単にOracleのSQLを実行し、その結果を取得する方法をご紹介します!
はじめに
これからご紹介する方法では、PowerShellとSQL*Plusを組み合わせて使用しています。
手元にあったWindows Server 2012R2 Standard Edition上にインストールされていた、Oracle Database 11g Release 11.2.0.4.0で動作確認を行い、正常に動作することを確認しています。
またSQL*Plusを使用した操作であるため、他のバージョンのWindows、Oracleでも正常に動作する可能性が高いと思われます。
ですがもし正常に動作しない場合は、問題箇所を修正してお使いください。
PowerShellを使ってOracleのSQLを実行し、結果を取得する方法
先にも書いたとおり今回ご紹介する方法では、PowerShellとSQL*Plusを組み合わせて使用します。
そして、PowerShell上で以下のような形式でコマンドを実行し、結果を取得します。
1 | 結果取得用の変数 = "SQLの実行文" | sqlplus ユーザー名/パスワード@サービス名 |
たとえばOracle上のすべてのユーザーのうち、先頭がSYSで始まるユーザー名の一覧を取得。
その結果をPowerShellの$result変数に格納したい場合は、以下のようなコマンドを実行します。
1 | $result = "SELECT USERNAME FROM ALL_USERS WHERE REGEXP_LIKE(USERNAME,'^SYS');" | sqlplus ユーザー名/パスワード@サービス名 |
上記コマンドを見ていただければ分かるとおり、実行したいSQLをSQL*Plusを使って実行し、その結果をPowerShellの変数で受け取るという、とってもシンプルな方法です。
$result変数に格納された内容は、以下コマンドを実行することでファイル出力が可能です。
1 | $result | Out-File "result.txt" -Encoding utf8 |
ファイルには以下のような内容が出力されており、結果文字列が正しく取得できていることが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SQL*Plus: Release 11.2.0.4.0 Production on 日 X月 X XX:XX:XX 2018 Copyright (c) 1982, 2017, Oracle. All rights reserved. Oracle Database 11g Release 11.2.0.4.0 - 64bit Production に接続されました。 SQL> USERNAME ------------------------------ SYS SYSTEM SYSMAN SQL> Oracle Database 11g Release 11.2.0.4.0 - 64bit Productionとの接続が切断されました。 |
※本来は上記ファイル内容の先頭に1行空行が入りますが、分かりづらいため削除して掲載しています。
先のコマンド操作により$result変数に取得した結果は、配列形式で格納されています。
そのため以下コマンドにより、$result配列変数の15番目の要素の値を確認すると、SYSMANという文字列が取得できます。
1 2 | Write-Host $result[14] SYSMAN |
※実際の$result配列の要素0(1番目の要素)には空行部のデータが入っており、15番目の要素にSYSMANという文字列が格納されています。
以上を参考に、PowerShellを使ってOracleのSQLの実行結果を取得してみてくださーい!