DBD-Oracle with oracle instant client
perlのDBIライブラリから、instant client経由でoracleにアクセスするためのDBD-Oracleのsetup方>法。
必要なファイル
- tar xvfz DBD-Oracle-1.19.tar.gz
DBIについては、CPANなどであらかじめsetupしておく。
setup
% tar xvfz DBD-Oracle-1.19.tar.gz % cd DBD-Oracle-1.19/ % vi Makefile.PL
ここで、Makefile.PLの以下の部分を修正する。
640,643c640,641
< #my @h_dirs = find_headers();
< my @h_dirs;
< #my $inc = join " ", map { "-I$_" } @h_dirs;
< my $inc = "-I//usr/local/oracle/10.2.0.3/lib/sdk/include";
---
> my @h_dirs = find_headers();
> my $inc = join " ", map { "-I$_" } @h_dirs;
makeの続き。
% export ORACLE_HOME=/usr/local/oracle/10.2.0.3 % export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH % perl Makefile.PL -m /usr/local/oracle/10.2.0.3/lib/sdk/demo/demo.mk % make % su # make install
このままperlを実行すると、libstdc++.so.5がないというエラーが起こる。
glibcのバージョンの古いものでcompileされたどっかのモジュールが悪さをしているらしい。
こういうこともあろうかと用意されているRPMをinstall。
% su - # rpm -i compat-libstdc++-33-3.2.3-47.3.i386.rpm
perlのsample
#!/usr/bin/perl
use DBI;
$ds = "dbi:Oracle:host=dbserver;sid=KURO";
$user = ''user01/pass01'';
$pass = '''';
$dbh = DBI->connect($ds, $user, $pass)
or die "Cannot connect: " . $DBI::errstr;
$sth = $dbh->prepare("select * from dual") or die "Cannot prepare: " .
$sth->errstr();
$sth->execute() or die "Cannot execute: " . $sth->errstr();
while ( @row = $sth->fetchrow_array() ) {
print "@row\\n";
}
$sth->finish();
$dbh->disconnect();