• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl・DBIでの汎用selectサブルーチンを作成するには?)

Perl・DBIでの汎用selectサブルーチンを作成するには?

このQ&Aのポイント
  • Perl・DBIを使用して、select文発行のサブルーチンを作成する方法について教えてください。
  • 呼び出し側では、SQL文を引数として渡し、SELECTされた結果を配列またはハッシュで取得したいです。
  • サブルーチンの作成方法や処理の流れについての参考サイトやサンプルサイトを紹介していただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.1

selectall_arrayrefとselectall_hashrefがあります。 $\ = "\n"; my $sql = 'select * from emp where age = ?'; my $dbh = DBI->connect($dbhost, $dbuser, $dbpass) || die $dbh::errorstr; my $aref = $dbh->selectall_arrayref ($sql,undef,1); foreach (@{$aref}) { print 'name:',$_->[0]; print 'age:',$_->[1]; } my $href = $dbh->selectall_hashref ($sql,undef,1); foreach (@{$href}) { print 'name:',$_->{'name'}; print 'age:',$_->{'age'}; } 当然(?)ですが、selectall_hashrefの方が遅いです。 あと、非常に重要な注意点として、selectall_hashrefは DBIのバージョンによって挙動が変わります。 (上のselectall_hashrefは最新版では動きません) もし、新しいバージョンのDBIを使う場合、 以下のようなコードなら同じような動作をさせることが出来ます。 while (my $aref = $sth->fetchrow_arrayref ()) { (@tmp{@{$sth->{'NAME_lc'}}}) = @{$aref}; push (@href,\%tmp); }

参考URL:
http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm
noname#6511
質問者

お礼

休日中なので、DBIの環境が調べられませんが、ありがとうございます。 書き込んだあとに、「selectall_arrayrefとselectall_hashref」の存在にたどり着いたのですが、『最新版では動きません』と言う情報は、非常に助かりました。 ありがとうございます。

関連するQ&A