Базы данных Oracle - статьи

         

Непосредственное обращение к БД


Доступ к БД под управлением 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

Идею поприветствовать Миллера я заимствовал из книги .



Содержание раздела