Доступ к БД под управлением Oracle может через sqlplus указанным выше способом. Способностей Perl вполне хватит отбросить из выходного файла лишние строки и символы и извлечь в свои внутренние структуры содержательную часть. Иногда этого достаточно, но чаще вам потребуется обращение в БД их программы на Perl напрямую, например потому, что это эффективнее, или потому что sqlplus в наличии нет.
Perl позволяет общаться напрямую со многими типами БД, и общение с СУБД Oracle реализовано в этом языке как частный случай общего решения. Правда для «настоящих» СУБД (не «персональных») история этого общего решения началась в Perl с 90-ми годами именно с частного случая Oracle. С другой стороны для Oracle в Perl есть и сугубо собственное решение, общение через OCI, которое здесь на рассматривается (для справки: это реализуется с помощью модуля Oracle::OCI в Perl).
Общение с БД «вообще» реализуется в Perl посредством специального интерфейса под названием DBI (буква i – independent – означает независимость от конкретного типа БД). Для работы с конкретной БД вдобавок требуется установить драйвер DBD, расчитанный на этот тип базы (буква d – dependent – означает зависимость от конкретного типа БД). Интерфейс DBI и драйвер Oracle DBD реализованы в виде модулей Perl, и их можно установить со страниц архивов Perl, называемых CPAN (Comprehensive Perl Archive Network): . В ActivePerl это можно сделать проще с помощью программы ppm. Достаточно войти в нее и выполнить команды:
ppm PPM> install DBI PPM> install DBD-Oracle PPM> query PPM> exit
Команда query позволит просмотреть все установленные модули и удостовериться в наличии DBI и DBD-Oracle.
Теперь все готово к проверке работы с Oracle. Составим файл HelloMiller.pl:
use strict; use DBI;
my $dbh = DBI ->connect ( 'dbi:Oracle:orcl', 'scott', 'tiger', {RaiseError => 1, AutoCommit => 0} );;
my $sql = qq{ SELECT ename, sal, COMM FROM emp };
my $sth = $dbh->prepare( $sql );
$sth->execute();
while ( my($ename, $sal, $comm) = $sth->fetchrow_array) { printf ("%-10s %7.2d %7.2d", $ename, $sal, $comm); if ($ename =~ /MILLER/) { print ", Hello Miller !"; } print "\n"; }
$dbh->disconnect();
Запустим программу:
HelloMiller.pl или perl HelloMiller.pl
Идею поприветствовать Миллера я заимствовал из книги .