![[tips][Perl] PerlでSQLplusからOracleのDBにアクセスする方法](https://casualdevelopers.com/wp-content/uploads/2014/01/electrical-2476782_1920-700x300.jpg)
PerlにはDBIという便利なモジュールがあり、そのモジュールを使えばOracleのDBにアクセスることは簡単です。ただ、開発環境というのは残念ながら自分の自由になるとは限りません。マイグレーションの案件に関わったことがある人なら痛いほど分かることでしょう。
今回は、DBIをあえて使わず、SQLplusを使ってDBにアクセスする方法を紹介します。
さっそくですが、以下のように書くと、PerlからSQLPlusを呼び出せます。
# 実行するクエリー my @querys = ("SELECT * FROM dba_users;", "SELECT * FROM all_users;"); # SQLPlusの設定 my $option = '-s' my $login = "$sqlplus_username/$sqlplus_password@$sqlplus_hostname"; # ログイン open my $sqlplus, "| sqlplus $option $login" or die("Exception : Can't login SQLPlus.$!"); # SQLPlus実行 foreach my $query @querys { print $sqlplus $query , "n"; } # ログアウト close $sqlplus or die "Exception : Can't logout SQLPlus.$!";
この方法のコツは、「|」(パイプ)です。Perlからの出力先をSQLPLusにすることで、ログイン -> コマンドを実行 -> ログアウトを実現しています。
このやり方を実際にやってみると、SQLPlus自体の文字数制限によって、クエリーが失敗することに気づきます。それを考慮したサンプルコードが以下です。
以下のコードで確認できます。
これで、Perlにモジュールを追加することなく、OracleのDBにアクセスできますね。ググっても意外と見つからなかったので、書いてみました。
サンプルコード自体はまだまだ改善の余地があるので、良いコードがあったら教えてください。
<環境>
OS : Windows7
Perl : Perl5.16.3
The following two tabs change content below.

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

コメントを残す