|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : yurik shestakov 2:5020/400 28 Apr 2000 18:39:47 To : Serge Cherpatyuk Subject : Re: DBI (rows) -------------------------------------------------------------------------------- Serge Cherpatyuk <Serge.Cherpatyuk@p39.f44.n4625.z2.fidonet.org> wrote: SC> Доброе время суток! SC> Одним местом чувствую, что после $sth->execute где-то SC> должно сидеть количество возвращаемых запросом строк SC> и не могу это "где-то" найти. И perldoc DBI мне не SC> помогает, может тут помогут? $sth->rows. Hо семантика зависит от драйвера. Hекоторые драйвера (к MySQL и Postgres), например, работают таким образом, что после выполнения execute() все данные передаются от backend-а к frontend-у, и, как следствие, после этого $sth->rows может вернуть точное значение строк в запросе. Точнее такое поведение драйвера определяется клиентской библиотекой которую пользует DBD::*. В отличие от этого драйвера к Oracle и Informix работают по другому. В этих СУБД есть понятие курсора. После execute() сервер только готов отдавать данные клиенту, но он это не будет делать до тех пор, пока ему не скажут FETCH. Как следствие $sth->rows возвращает реально считанное (по команде FETCH) количество строк. Вывод: для определения кол-ва строк в запросе использовать $sth->rows после $sth->execute не является переносисмым решением, и в некоторых случаях приводит к overhead-у из-за того, что программист просто решил посчитать кол-во записей, попадающих под выборку, вместо того, чтобы выполнить: my $count = $dbh->selectrow_array('SELECT count(*) FROM mytable'); SC> Gray. -- // yurik shestakov (aka shisha) --- ifmail v.2.15dev5 * Origin: home alone (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/91384a719386.html, оценка из 5, голосов 10
|