🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52197

Re: perl - wyciąganie danych z bazy

#52197
From: Szymon Sokół
Date: Fri, 15 Apr 2011 21:18
63 lines
3812 bytes
On Thu, 14 Apr 2011 22:24:08 +0200, Maciej Misiak wrote:

> W dniu 2011-04-14 08:47, Antiloop pisze:
> 
>> Zastanawiający jest fakt iż nie korzystasz z metody fetchrow_array(),
>> gdyż ja zawsze korzystałem własnie z niej.
>> Jakie są plusy z korzystania z fetchall_arrayref()?
> 
> Z reguły w przypadkach małych ilości danych żadne, dopiero jak się robią 
> duże ilości rekordów albo dowolne ilości, ale w wielu wątkach to 
> referencje potrafią zaoszczędzić wiele pamięci.

Podstawową zaletą grupy funkcji fetchall_hashref, fetchall_arrayref,
selectall_hashref, selectall_arrayref jest to, że zwracają jednym
wywołaniem komplet danych generowanych przez dane zapytanie SQL. Jest to
zarazem podstawowa wada. Wada, bo zjada sporo pamięci, zaleta, bo można
hurtem na całości danych operować, zamiast rekord po rekordzie.
Przykładowo, w celu wypisania imion wszystkich Nowaków i Kowalskich (osobno
jednych, osobno drugich) z tabeli 'obywatele' można zrobić:

         my $sth = $dbh->prepare("SELECT imie, nazwisko FROM obywatele WHERE nazwisko=?");
         for my $nazwisko ('Nowak', 'Kowalski') {
           $sth->execute( $nazwisko );
           while ( my @row = $sth->fetchrow_array ) {
             print "@row\n";
           }
         }

albo:

         my $sth = $dbh->prepare("SELECT imie, nazwisko FROM obywatele WHERE nazwisko=?");
         for my $nazwisko ('Nowak', 'Kowalski') {
           $sth->execute( $nazwisko );
           while ( my $row = $sth->fetchrow_arrayref ) {
             print "@$row\n";
           }
         }

ale można też:

         my $sth = $dbh->prepare("SELECT imie, nazwisko FROM obywatele WHERE nazwisko=?");
         for my $nazwisko ('Nowak', 'Kowalski') {
           $sth->execute( $nazwisko );
           my $all_rows = $sth->fetchall_arrayref;
           for my $row ( @$all_rows ) {
             print "@$row\n";
           }
         }

albo wręcz:

         for my $nazwisko ('Nowak', 'Kowalski') {
           my $all_rows = $dbh->selectall_arrayref("SELECT imie, nazwisko FROM obywatele WHERE nazwisko=?", {}, $nazwisko);
           for my $row ( @$all_rows ) {
             print "@$row\n";
           }
         }

-- 
Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
Computer Center, AGH - University of Science and Technology, Cracow, Poland  O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
Free speech includes the right not to listen, if not interested -- Heinlein  H
Technical Details
Message-ID: <1d8ip85gc6ten$.dlg@falcon.sloth.hell.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!.POSTED!dustpuppy.sloth.hell.pl!not-for-mail
References: <ilbcmq$57j$1@pippin.nask.net.pl> <ill10a$t37$1@pippin.nask.net.pl> <ill1km$t7k$1@pippin.nask.net.pl> <ffb701b4-81d6-4d26-aab0-51c77b20b28a@e9g2000vbk.googlegroups.com> <io7l59$u5u$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!.POSTED!dustpuppy.sloth.hell.pl!not-for-mail
From: Szymon Sokół
 <szymon@bastard.operator.from.hell.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: perl - wyciąganie danych z bazy
Date: Fri, 15 Apr 2011 23:18:23 +0200
Organization: Guy Fawkes Society
Lines: 63
Sender: szymon@news.agh.edu.pl
Message-ID: <1d8ip85gc6ten$.dlg@falcon.sloth.hell.pl>
References: <ilbcmq$57j$1@pippin.nask.net.pl> <ill10a$t37$1@pippin.nask.net.pl> <ill1km$t7k$1@pippin.nask.net.pl> <ffb701b4-81d6-4d26-aab0-51c77b20b28a@e9g2000vbk.googlegroups.com> <io7l59$u5u$1@news.onet.pl>
NNTP-Posting-Host: 89-79-74-119.dynamic.chello.pl
Mime-Version: 1.0
X-Trace: news.agh.edu.pl 1302902388 30466 89.79.74.119 (15 Apr 2011 21:19:48 GMT)
X-Complaints-To: abuse@agh.edu.pl
NNTP-Posting-Date: Fri, 15 Apr 2011 21:19:48 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.1 Hamster/2.1.0.11
X-Face: xic?6f"rD)k-tM.]L]A6l4W7_aGt({}&{D,hiRI.8cPtf,1F.w@Qkl!vr23o1UY-BfXO$p< hk5>ijB?eBy)?!C<@)+%U\&`1X)MJ>.i.qgkY]4mvL62j<|xJRG/5:7:l8q]x;v!)Bz^r/!yG8DxoD -@fnC,g]BAXj
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit