皆さん、Perlは好きですか?
私は大好きで今でもデータの抽出や加工に使っていたりします。
Linuxだとデフォルトで入っていますし、Windowsでもビルドしてあるものが配布されていたりして導入も簡単です。
今回は、Windows上のPerlからOracleDBへアクセスする方法を紹介します。
DBのデータをPerlでいじれるとかなり便利だと思います。
環境(前提)
●データベース → OCI BaseDB(OraceDB 19c Standard Edition)
PDBにテーブルを既に入れてある前提
●Windows → Windows Server 2022 Standard (OCI上に構築)
●OCI上のネットワーク
VCNを構築済みでセキュリティリストでRDPで使うTCP/3389とOracleDBで使うTCP/1521が通る設定になっている事。
WindowsへPerlを入れる
WindowsにPerlを入れるとなるとActive PerlかStrawberry Perlになるかと思いますが、今回は比較的新しめのリリースのあるStrawberry Perlをインストールします。
対象のインストーラをダウンロード
こちらへアクセスして最新版をダウンロードしてインストールします。
UACからこのようなメッセージが出たら「YES」を押下してください。
無事にインストールが完了したらちゃんと実行できるか調べてみましょう。
コマンドプロンプトを開いて
perl -version
と入れてバージョンが表示されば無事にインストールされ、パスも設定されています。
Oracle Clientのインストール
次にOracleDatabaseへアクセスるために必要なOracle Clientをダウンロードします。
こちらにアクセスしてダウンロードします。
パッケージがいくつかありますが、Basic, sqlplus, sdkの3つをダウンロードします。
C:¥直下に「oracle」という名前のフォルダを作成します。
ダウンロードしたパッケージは3つとも中にinstantclient_21_9というフォルダが入っているので3つとも先ほど作成した「C:\oracle」へ入れます。
環境変数の設定
次に今コピーしたC:\oracle\instantclient_21_9へのパスを設定して、ORACLE_HOMEという環境変数も作成します。
カテゴリ順だとわかりずらいのでsmall iconsに切り替えます。
右の方に「Advanced system settings」があるので開きます
下の方に「Enviroment Variables」があるので開きます。
下の「System variables」のペインの中にある「Path」を選択し、「Edit」ボタンを押下します。
右上の「New」ボタンを押し新しい値として「C:¥oracle¥instantclient_21_9」を入力し、下部の「OK」ボタンを押下します。
これでパスの設定はできました。
次に新たな環境変数の追加です。
Enviroment Variablsウィンドウの下の方にある「New」というボタンを押下します。
新しい環境変数を作成するウィンドウが開くので「ORACLE_HOME」という変数に「C:¥oracle¥instantclient_21_9」を値として入力し、OKを押下します。
パスが正しく通ったか動作確認をしてみます。
コマンドプロンプトを開いて
sqlplus
と入力し、下図のようにバージョンが出ればパスは通っています。
![53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367![57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/b1bdb211-f95e-71a8-0720-d398eb7144f4.jpeg)
692/5cfa49e8-39b0-a98c-725d-ea21d2d9a19c.jpeg)
Perlのライブラリを入れる
PerlでOracleDatabaseへ接続するライブラリを追加します。
コマンドプロンプトで
cpan DBD::Oracle
と入力します。
正常に終わると一番最後が「OK」になります。
ここでエラーになる場合はORACLE_HOMEという環境変数が正しく設定されていない可能性があります。
OracleDBの設定
次にOracleDatabaseへアクセスする情報が入っているtnsname.oraファイルを作成します。
C:¥oracle¥instantclient_21_9¥network¥admin配下にtnsnames.oraを作成します。
次に、接続先のBaseDBへログインし、そちら側のtnsnames.oraを確認します。
今回はPDBの方に接続するので赤枠のPDBの情報を先ほど作成したWindows側のtnsnames.oraにコピーします。
これでWindowsのコマンドプロンプトからsql plusを使ってBaseDBへアクセスできるはずです。
コマンドプロンプトで
sqlplus /@
を入力して接続先情報が出ればOKです。
試しにselect文を実行してみるとテーブルの中身が表示されます。
PerlからSQL文を実行してみる
ここまで出来たらあとはPerlからアクセスするだけです。
こんな感じのスクリプトを準備しました。
#!perl.exe
use DBI;
print "----------------------------------------\n";
print "|CATNO\t|NAME\t|COLOR|\n";
print "----------------------------------------\n";
$dbh = DBI -> connect("dbi:Oracle:PDB1","test","<パスワード>");
$sth = $dbh -> prepare('SELECT * from cat');
$sth -> execute();
while(@ary = $sth -> fetchrow){
$i = 0;
while($i < @ary){
print "|" . $ary[$i] . "\t";
$i++;
}
print "|\n";
}
$sth -> finish();
$dbh -> disconnect();
PerlからSQL文を叩けるようになれば色々とデータをいじれて便利になりますね。
以上、OCIのWindowsServerからPerlでBaseDBへ接続する方法でした。