Entries

perl+DBI プログラムの鉄則

68user 的 perl+DBI プログラムのルール。初心者に教育するときはこのサンプルプログラムを渡すこと。重視すべきなのは、バグの入り込まないコーディングスタイルであることと、可読性を重視すること。速度はその後でよい。

まずはサンプルプログラム。解説は後ほど。


#!/usr/bin/perl

use strict;
use DBI;

my $dbh = DBI->connect($dsn, $user, $password,
                       {RaiseError => 1, PrintError => 0, AutoCommit => 0 })
   || die "$!";
eval {
   &mainwork();
   $dbh->commit;
   $dbh->disconnect;
};
if ( $@ ){
   $dbh->rollback;
   $dbh->disconnect;
}

exit 0;

#--------------------------
sub mainwork {
  my $sql =
    "SELECT ".
    "  hoge, ".
    "  fuga ".
    " FROM table1 ".
    " WHERE foo = ?";

  my $sth = $dbh->prepare($sql);
  $sth->bind_param(1, $hogehoge);
  $sth->execute;

  while ( my $arr_ref = $sth->fetchrow_arrayref ){
    my ($hoge, $fuga) = @arr_ref;
    print "hoge=[$hoge] fuga=[$fuga]\n";

    my $sql =
      "UPDATE table2 SET ".
      "  hoge = ? ".
      " WHERE fuga = ?";

    my $sth = $dbh->prepare($sql);
    $sth->bind_param(1, $hoge);
    $sth->bind_param(2, $fuga);
    my $rows = $sth->execute;

    # 正常時は、ここで 1行だけ更新されるものとする。
    if ( $rows != 1 ){
      die "更新行数が異常! rows[$rows] sql[$sql] hoge[$hoge] fuga[$fuga]";
    }
  }
}
このエントリーをブックマークに追加 ブックマークに追加する
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://68user.blog27.fc2.com/tb.php/3-e41f9a56

1件のトラックバック

[T9] 初めてMySQLとPerlの連帯でプログラムが書けました(後編)

<<前編へはじめに作って、実行はされるがうんともすんとも言わなかったスクリプトから掲載。##########################################################!/usr/bin/perl -wuse strict;use DBI;

1件のコメント

[C55] 参考にさせていただきました

参考にさせていただきまして、無事に動くスクリプトが書けました。ありがとうございます。

勘違いだった申し訳ないのですが、

my ($hoge, $fuga) = @arr_ref;
の部分は
my ($hoge, $fuga) = @$arr_ref;
ではないでしょうか?
エラーが出ましたところ そうするといけましたので・・・
  • 2007-02-25
  • ビンゴ中西
  • URL
  • 編集

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

Author:68user
http://X68000.q-e-d.net/~68user/

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Powered By FC2ブログ

Powered By FC2ブログ
ブログやるならFC2ブログ