All,
I've posted bits of this earlier, but here is the problem in a
nutshell... the code below executes DBCC INDEXDEFRAG in a MS SQL
Server... I did some research on the 'invalid cursor state' that you'll
see below in the output... this command returns a result set, so I
realized I needed to retrieve that separately...that did not solve the
problem... so the bottom line is... how do I get the result set from
this sort of command... and also get the message output ( that's working
right now...)
Other commands, such as DBCC CHECKDB...don't return result sets, so I
get all of the output handled in the odbc_err_handler...
Here's the basic code..... results are below...you can see that the
'dump_results' method didn't have anything to work on...
Does anyone have any clues here?
Thanks,
LouiseM
*************************
code
***********************
#!d:\apps\perl\bin\perl.exe
use DBI;
$dbh_actions = DBI->connect
("dbi:ODBC:Driver={SQL
Server};Server=irmdm2;Trusted_Connection=yes;",'','',
{ PrintError => 0,
RaiseError => 0,
LongReadLen => 65536,
odbc_async_exec => 0,
odbc_err_handler => sub {
my ($state, $msg) = @_;
# Strip out all of the driver ID
stuff
$msg =~ s/^(\[[\w\s]*\])+//;
$err_text .= $msg."\n";
return 0;
}
}
);
$command = 'begin dbcc traceon(3604) DBCC
INDEXDEFRAG(pps,cost_sheet,ix_cost_sheet_u1) end';
$sth = $dbh_actions->prepare($command);
die $DBI::errstr unless $sth;
$rc = $sth->execute(); # This is the 'do it'.....
$rows = $sth->dump_results();
print "** rows: $rows\n";
print "\nCOMMAND OUTPUT:\n$err_text\n";
$dbh_actions->disconnect;
*************************
RESULTS
*************************
0 rows (-1: (DBD: no select statement currently executing err=-1))
** rows: 0
COMMAND OUTPUT:
DBCC execution completed. If DBCC printed error messages, contact your
system administrator.
Invalid cursor state