Perl для системного администрирования



              

Использование DBI - часть 4


print "dept: " . $aref->[2] . "\n":

А теперь рассмотрим «удобный» метод fe*chall_array"of (). Он загружает весь полученный результат в одну структуру данных, возвращая ссылку на массив ссылок. При использовании данного метода будьте осторожны и учитывайте размер запросов, поскольку результаты целиком считываются в память. Если размер результата равен 100 Гбайт, это может вызвать проблемы.

Каждая ссылка выглядит точно так же, как и результат вызова метода fetchrow_an ayref ().

Вот какой код выводит результат запроса целиком:

$aref_aref = $sth->fetchall_arrayref;

foreach $rowref (@$aref_aref){

print "name: " . $rowref->[0] . "\n";

print "ipaddr: " . $rowref->[1] . "\n";

print "dept: " . $rowref->[2] . "\n";

print '-'x30."\n": }

Этот пример применим только к конкретному набору данных, поскольку предполагается, что количество полей фиксировано и они следуют в определенном порядке. Например, считается, что имя машины возвращается в первом поле запроса ($rowref->[0]).

Можно переписать предыдущий пример и сделать его более общим, если использовать атрибуты (часто называемые метаданными) дескриптора команды. В частности, если после запроса посмореть на $sth->{NUM_OF_FIELDS}, то можно узнать количество полей в полученных данных. $sth->{NAME} содержит ссылку на массив названий полей.

Обязательно изучите документацию по DBI, чтобы подробно узнать об остальных метаданных.

Шаг 5: Закройте соединение с сервером

С DBI это очень просто сделать:

сообщаем серверу, что данные из дескриптора команды больше

и не нужны (необязательно, т. к. мы собираемся завершить

# соединение)

$sth->finish;

ft разорвать соединение дескриптора с базой данных

$dbh->disconnect;

Что еще надо сказать о DBI

Осталось еще две темы, которые стоит обсудить, прежде чем переходить к ODBC. Во-первых, это набор методов, которые я называю «удобными» (shortcut methods). Методы, приведенные в табл. 7.2, объединяют перечисленные шаги 3 и 4.




Содержание  Назад  Вперед