bruce wrote:

hi..

i'm trying to understand if there's a difference/better reason for doing
transactions using either of the following psuedo approaches...

approach 1 does the commit inside the eval block, whereas approach 2 has the
commit outside the eval block... i've seen sample code with transactions
handled both ways...

approach 1:
eval
{
  $dbh->do("do something");

  # got this far means no errors
  # commit
  $dbh->commit();
};

# check errors/rollback
if ($@)
{
  $dbh->rollback();
}


approach 2: eval { $dbh->do("do something"); };

# check errors/rollback
if ($@)
{
  $dbh->rollback();
}
else
{
  # commit
  $dbh->commit();
}


any comments/criticisms/thoughts/etc...

thanks...

-bruce




I think the commit needs to be inside the eval, because
thats when problems might arise.  Also, I assume that you
at some point set AutoCommit = 0.  I usually do transctions
like this:

sub test {

   eval { $dbh->begin_work };
   if ($@) {
       print "begin transaction failed: $@";
       return;
   }

   eval {
       .. do some stuf ..
       $dbh->commit;
   };

   if ($@) {
       eval { $dbh->rollback };
       print "transaction failed: $@";
   } else {
       print "data committed successfully.\n";
   }

}
hope this helps,
Mayuran.

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to