Oracle + Perl に関するインストールメモ(2002/02/24,
更新日:2003/11/14)
Perl上から直接データベースとお話できるインタフェースをもっている
プログラムCPANモジュールです。設定も使用法もとっても簡単ですのでどんどん使いましょう。ちなみにお話できるデータベースは、 Oracle/Postgres/Sysbase/Informix.... ってな感じです。
DBDモジュール一覧 : http://www.perl.com/CPAN/modules/by-module/DBD/
参考 : ActivePerlでオラクる(DBI+DBD::OracleとOO4O)
参考 : DBI::Shell (DBI v1.14)(日本語チョー訳)
データベースにアクセスするこの手のプログラムを作成するには、今まで C言語 + OCI などと相場(プログラム単価が高いからね)が決まっていましたが、そこは C言語な訳で文字列の取り扱いが面倒だったり、コアダンプを起こしたりと非常に困難を極めるわけっすよ。
ところが、Perl + DBI/DBD でプログラムを作成すると、下記を見ても判る通りチョー簡単ですのでどんどん使いましょう。しかしある程度の規模・大きさ・機能がある場合は、Perlで作る事をお勧めしません。あくまでもチョットしたプログラムに最適ってことを頭の隅においといてくださいね♪
OCI の説明がgoo! : Ruby/OCI8 上位API
DBD の説明がgoo! : DBD::Oracle - DBIモジュールのためのOracleデータベース・ドライバ
1.DBI (v1.21) の設定をする。
% cd /opt/local/src
% wget http://www.cpan.org/authors/id/TIMB/DBI-1.21.tar.gz
% gzip -cd DBI-1.21.tar.gz | tar xf -
% cd DBI-1.21
% perl Makefile.PL
% make
% make test
% su
# make install2.DBD::Oracle(v1.12) の設定をする。※ORACLE_* の環境変数が設定されていること。
% cd /opt/local/src
% wget http://www.perl.com/CPAN/modules/by-module/DBD/DBD-Oracle-1.12.tar.gz
% gzip -cd DBD-Oracle-1.12.tar.gz | tar xf -
% cd DBD-Oracle-1.12
% perl Makefile.PL
% make
% su
# make install3.こんなヘボいテーブルを作って、データを入れてみる。
create table hoge (
NAME varchar(64),
COMPANY varchar(32)
);
insert into hoge values ('hoge', 'hoge');
commit;4.アクセスのテストをしてみる。
※デフォルトの connect 関数は、AutoCommit設定になっています。そのためデータベースに対して行った命令は、その命令毎にコミットされ反映されます。
※そのためトランザクションを制御したい場合には、connect 関数内の AutoCommit属性をオフにします。トランザクションを自前で制御する場合、commit や rollback のタイミングは全てプログラマの責任において行う必要があります。
※またデータベースによってはトランザクションをサポートしていない場合もありますので、DBDのドキュメントをチェックすべきでしょう。
#!/usr/bin/perl
use DBI;
$dbh = 0;
$sth = 0;
# oracle
$ora_sid = $ENV{'ORACLE_SID'};
$ora_login = "hoge";
$ora_pw = "hoge";
# DBに接続
$dbh = DBI->connect("dbi:Oracle:$ora_sid", "$ora_login", "$ora_pw", \%CONN_ATTR)
or die "CONNECT ERROR $DBI::errstr";
# 動的SQL文の発行
$hSt = $dbh->prepare("SELECT * FROM hoge");
# 実行
$nRes = $hSt->execute;
# 実行結果のデータ取得
while($raRes = $hSt->fetchrow_arrayref) {
print join("\t", @$raRes), "\n"; #タブ区切りで出力
}
# 動的SQL(prepare)の明示的な終了
$hSt->finish;
# DBの切断
$dbh->disconnect;5.こんな風に出力されれば ok だす。
% ./ora.pl
hoge hoge