« SQLite perl DBI 備忘録 | トップページ | こりゃあ役に立つ  googleマップのすごい応用 »

2011年1月22日 (土)

perl DBI executeの返り値 備忘録

今日の教訓
  「perl DBI のexecuteの返り値を使っちゃダメ」

Postgresqlのときは、SELECT文をexecuteで実行した後、その返り値をヒットした件数としてプログラムで使っていました。
Postgrtesqlではそれでうまくいっていたのですが(これ、本当に本当!)、SQLiteで同じコードを動かしてみたらうまくゆかない。
テストしてみると、SQLiteではexecuteの返り値はヒットしてもしなくても "0E0" になってます。
何じゃいこれはと調べてみると、

-------------------------------------------------------
書式
$rv = $sth->execute();
機能
executeメソッドは、prepareメソッドで用意したSQL文を実行します。
$rvには、処理した件数が返却されます。
--------------------------------------------------------

とのこと。....処理した件数って??

さらに調べてみると、MySQLでは

---------------------------------------------------------
非 SELECT ステートメントの場合、execute は影響を受けたレコードの
数を返す。影響を受けたレコードがない場合、execute は "0E0" を返す。
Perl はこの戻り値を 0 として処理するが、true とみなす。エラーが発生
した場合、execute は undef を返す。
----------------------------------------------------------

結論として、SELECTではexecuteの返り値は意味がないということですな。
またひとつ利口になりました。
   ...ぅぅ〜、あっちこっちで使っちゃてるよぅぅ。

にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村

|

« SQLite perl DBI 備忘録 | トップページ | こりゃあ役に立つ  googleマップのすごい応用 »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/152716/50651039

この記事へのトラックバック一覧です: perl DBI executeの返り値 備忘録:

« SQLite perl DBI 備忘録 | トップページ | こりゃあ役に立つ  googleマップのすごい応用 »