« SQLの実行計画の取得方法 | トップページ | log4jの設定について。 »

selectall_arrayref の使い方

perl/DBI

Perl-DBI…サイトを色々見ててもかゆい所に手が届きづらい感じなのはなんなんだろうか…orz

selectall_arrayref の使い方ですっごい躓いたので備忘録。
selectall_arrayref の引数は以下。
1:SQL文字列
2:取得形式
3:バインド変数

ここで躓いたのは2なんですが……

各サイトでよっく見かけた記述が「\%attr」…つったってだからそのアトリビュートに何入れるんだっつー話ですよコレが。
分かんねぇよ!……みんな分かってんのかな……まぁAPIちゃんと読めよという話なんでしょうか。うーん。

http://blog.scrapcode.net/article/598613.html
↑こちらのブログでようやくとっかかりを見つけました。これも間違ってないんですが不十分…
こちらでは、「{Columns => {}}」を渡せと書いてあります。空のハッシュです。これに詰めて配列にして返してねってことみたいです。

で、最終的にたどり着いたのがこちら。
http://yanor.net/wiki/index.php?Perl-DBI%2FSELECT

目から鱗がボロボロボロボ。ホントに有り難うございました。
パターンとしては以下。
・未指定 :配列の配列(※バインド変数有りの時は指定出来ない気がします。未確認)
・{Slice=>[]} :配列の配列
・{Slice=>{}} :ハッシュの配列
・{Columns=>{}} :ハッシュの配列
・{Slice=>[0, 1]} :配列の配列(1カラムめと2カラムめのみ)
・{Columns=>[1, 2]} :配列の配列(1カラムめと2カラムめのみ)(※Columnsだと1カラムめのインデックスが1になる)
・{Columns=>{id=>undef, name=>undef}} :ハッシュの配列(id列とname列のみ)

[ ] と書くと配列で、{ } と書くとハッシュで取得。
Slice と Columns では、配列のインデックスが違う、という感じ。

ソース例:
my $sql   = "SELECT ID, NAME FROM M_MEMBER WHERE SEX = ? AND AGE < ?";
my @param = ('MALE', 30);

# SQL実行(配列の配列のリファレンスを取得)
$rRows    = $$myDbh -> selectall_arrayref($sql, {Slice => []}, @param);

my @rows = @$rRows;  # @rows は配列の配列

# このあたりにfor文入れるハズ
my $rRow = $rows[0]; # $rRow は1件めの配列のリファレンス
my @row  = @$rRow;   # @row  は1件めの配列
print "$row[0]<BR>";

私はあんまり使わない気がするけど、selectall_hashref もちょっと面倒な書き方でした。上のサイトさん消えないと良いなあ…(^^;)

|

« SQLの実行計画の取得方法 | トップページ | log4jの設定について。 »

perl」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: selectall_arrayref の使い方:

« SQLの実行計画の取得方法 | トップページ | log4jの設定について。 »