On Tue, Jul 13, 2004 at 03:26:13PM +0200, Michael Peppler wrote:
> [ Posted this to the sybperl-l mailing list a little while ago. I guess
> there may be some users of DBD::Sybase here that would be interested
> in this. Note that this will probably NOT work with FreeTDS unless
> their BLK API is fully functional.]
>
> I've just uploaded DBD::Sybase 1.04.2 to
> http://www.peppler.org/downloads/
>
> This is a test version that includes support for using the BLK
> (bulk-load) API from DBI's prepare/execute calls.
Great. Thanks Michael.
> Sample code:
>
> my $dbh = DBI->connect('dbi:Sybase:server=MY_SERVER;bulkLogin=1',
> $user, $pwd);
> my $sth = $dbh->prepare('insert the_table values(?, ?, ?, ?, ?)",
> syb_bcp_attribs => { identity_flag => 0,
> identity_column => 0 }});
> while(<DATA>) {
> chomp;
> my @row = split(/\|/, $_); # assume a pipe-delimited file...
> $sth->execute(@row);
> }
> $dbh->commit;
> print "Sent ", $sth->rows, " to the server\n";
> $sth->finish;
> AutoCommit is ignored for this operation (it is always off).
Could you make it warn if AutoCommit is on, and include $dbh->begin_work
in your examples? That would make the code more portable.
> Calling $dbh->commit will commit any non-committed rows, and will fail if any
> row in the batch fails (i.e. duplicate insert error).
> Calling $dbh->rollback will cancel the current batch, *and* will cancel
> the BCP operation (i.e. no further rows can be inserted).
So the $sth isn't usable any more. Okay.
> $sth->rows returns the number of rows committed for the latest call to
> $dbh->commit().
> $sth->execute() will fail if there are any data conversion errors.
> $sth->finish will rollback any non-committed rows.
What's the role of finish() here? Is it needed?
Tim.