При выполнении этой команды с параметрами 1000 и 9000 будут выбраны записи со значениями колонки id в заданном диапазоне. При подстановке значений аргументов в команду слоты заполняются слева направо:
$sth->execute(1000, 9000); # подставить числа вместо ?
После подстановки значений будет выполнена команда, означающая "выбрать значения столбцов name и area из таблицы mollusc у тех записей, где значение столбца id больше 1000 и меньше 9000":
SELECT name, area FROM mollusc WHERE id>1000 AND id<9000
Кроме средств выполнения SQL-команд механизм DBI предоставляет множество методов для выборки из базы данных информации в виде массивов или хэшей для более удобной обработки в программе на Perl. Более подробно с ними можно познакомиться, если почитать системную документацию, выведенную по команде
perldoc DBI
Покажем приемы работы с интерфейсом DBI на примере класса доступа к уже знакомым DBF-файлам - модуля DBD::XBase. Этот модуль нужно установить описанным ранее способом прежде, чем работать с базами данных в формате XBase. В первом примере программа создает таблицу базы данных SQL-командой CREATE:
use DBI; # использовать DBI
my $path = '.'; # каталог, где расположены таблицы БД
my $table = 'mollusc'; # DBF-файл
# подсоединиться к БД, используя драйвер DBD::XBase
my $dbh = DBI->connect("dbi:XBase:$path")
or die $DBI::errstr;
# создать таблицу определенной структуры
$dbh->do("CREATE TABLE $table (id INT,
name CHAR(35), latin CHAR(30), area CHAR(45))");
$dbh->disconnect; # отсоединиться от БД
Следующая программа в цикле заполняет созданную таблицу данными из текстового файла, добавляя в нее записи SQL-командой INSERT:
use DBI; # используем DBI
my $path = '.'; # каталог с таблицами БД
my $table = 'mollusc'; # DBF-файл
# подключаемся к БД, используя драйвер DBD::XBase
my $dbh = DBI->connect("dbi:XBase:$path")
or die $DBI::errstr;
# подготовим SQL-команду для многократного выполнения
my $sth = $dbh->prepare("INSERT INTO $table
(id, name, latin, area)
VALUES (?, ?, ?, ?)")
or die $dbh->errstr();
# в цикле читаем строки для загрузки в БД
open my $text, '<', 'mollusc.txt' or die; # файл, откуда
while (my $data = <$text>) { # читаем данные,
chomp($data); # удаляя \n
# и разбивая строку на поля по разделителю ';':
my ($id, $name, $latin, $area) = split(';', $data);
# добавляем запись, подставляя значения в команду
$sth->execute($id, $name, $latin, $area) or die;
}
close $text; # закрываем тестовый файл
$dbh->disconnect; # отсоединяемся от БД
Далее можно выполнять различные действия с данными в таблице, используя команды SQL, как это сделано в программе, где изменяются значения перечисленных колонок в записи с указанным идентификатором и удаляется запись по уникальному номеру:
use DBI; # использовать DBI
my $path = '.'; # каталог, где расположены таблицы БД
my $table = 'mollusc'; # DBF-файл
# соединиться с БД, используя драйвер DBD::XBase
my $dbh = DBI->connect("dbi:XBase:$path")
or die $DBI::errstr;
# изменить запись с указанным идентификатором,
# заменяя значения перечисленных полей на новые
$dbh->do("UPDATE $table SET name=?,area=? WHERE id=?",
undef, 'Жемчужная пинктада', 'Австралия', 89147) or die;
# удалить запись с идентификатором 93749
$dbh->do("DELETE FROM $table WHERE id=93749") or die;
$dbh->disconnect; # отсоединиться от БД
Для выборки данных из таблицы используется SQL-команда SELECT, в которой можно указывать, данные из каких колонок записи нужно включить в выборку, а также по какому условию отбирать строки таблицы:
use DBI; # использовать DBI
my $path = '.'; # каталог, где расположены таблицы БД
my $table = 'mollusc'; # DBF-файл
# соединиться с БД, используя драйвер DBD::XBase
my $dbh = DBI->connect("dbi:XBase:$path")
or die $DBI::errstr;
# выбрать у всех строк таблицы указанные поля
my $sth =
$dbh->prepare("SELECT name,area FROM $table WHERE id>?")
or die $dbh->errstr;
$sth->execute(1000) or die $sth->errstr(); # выполнить команду
while (my @row = $sth->fetchrow_array) { # и напечатать
print "@row\n"; # выбранные строки
} # в цикле по одной
$dbh->disconnect; # отсоединиться от БД