- 论坛徽章:
- 0
|
我看到一篇关于perl稳固交易机制数据库编程,其中有一个例子:
my @records = (
[ 0, "Larry Wall", "erl Author", "555-0101" ],
[ 1, "Tim Bunce", "DBI Author", "555-0202" ],
[ 2, "Randal Schwartz", "Guy at Large", "555-0303" ],
[ 3, "Doug MacEachern", "Apache Man", "555-0404" ]
);
my $sql = qq{ INSERT INTO employees VALUES ( ?, ?, ?, ? ) };
my $sth = $dbh->;prepare( $sql );
for( @records ) {
eval {
$sth->;bind_param( 1, @$_->;[0]);
$sth->;bind_param( 2, @$_->;[1]);
$sth->;bind_param( 3, @$_->;[2]);
$sth->;bind_param( 4, @$_->;[3]);
$sth->;execute();
$dbh->;commit();
};
if( $@ ) {
warn "Database error: $DBI::errstr\n";
$dbh->;rollback(); #just die if rollback is failing
}
}
$sth->;finish();
eval{...} 区块来拦截错误的发生,最後再使用 commit 或 rollback 来完成整个交易程序。
对于一个小的交易程序可以这样用一个块来完成,但是多数交易不可能只更新1~2张表,代码也比较长,还必调用一些函数来解决,这个时候如何用块来拦截呢?
上述例子也是每条记录就commit了,而不是最后才commit的,很少交易这样做。
不知老大们是怎么处理的?????还望多多指点菜鸟!!! |
|