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



         

Использование ODBC - часть 2


$rc = $dbh->Sql(q{SELECT « from hosts});

Есть разница между методами ODBC и DBI: в отличие от do() из DBI, Sql() возвращает undef, если запрос был завершен успешно, и некоторое ненулевое значение, если запрос не был выполнен.

Если необходимо узнать, сколько записей было обработано в результате запроса INSERT, DELETE или UPDATE, следует использовать метод RowCount(). В документации по Win32: :ODBC сказано, что этот вызов реализован не во всех драйверах ODBC (либо реализован не для всех операторов SQL), поэтому не стоит слепо полагаться на драйвер, лучше сначала все проверить. Как и в случае с методом ехе из DBI, RowCount() вернет 1, если драйверу недоступна информация о количестве полученных записей.

Шаг 4: Получите результаты запроса SELECT

Получение результатов запроса SELECT для ODBC выполняется подобно тому, как это было сделано для DBI, но с одним отличием. Во-первых, получение

данных с сервера и обращение к ним являются двумя разными шагами в Win32: : ODBC. Метод FetchRow() получает следующую запись, возвращает 1, если все прошло успешно, и undef, если что-то было не так. Когда запись получена, можно выбрать один из двух методов, чтобы обратиться к ней.

Метод Data() возвращает список полученных полей, если вызывается в списочном контексте, и все поля, склеенные вместе, если вызывается в скалярном контексте. Data() может принимать в качестве необязательного аргумента список, определяющий, какие поля возвращать и в каком порядке (иначе, в соответствии с документацией, они возвращаются в «неопределенном» порядке).

Метод DataHash() возвращает хэш, ключами которого являются имена полей. Это очень похоже на DBI-метод fetchrow_hashref(), с тем исключением, что он возвращает хэш, а не ссылку на хэш. Как и Data(), DataHash() тоже может принимать список в качестве необязательного аргумента для определения того, какие поля возвращать.

В нашем случае эти методы выглядят так:

if ($dbh->FetchRow()){

@ar = $dbh->Data();

сделать-что-то-со-значениями @ar }




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