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();