As always, if this is the wrong mailing list or if this information
exists in a faq I have not found yet, please accept my apologies and
point me in the correct direction.
CLIENT BOX:
RH Linux (kernel 2.4.3-12)
Perl 5.6
Freetds 0.52
DBI/DBD::Sybase 0.91
Database Server/Box
Win2000
SQLServer 7
I have a stored procedure on the SQL Server7
that looks like,
CREATE PROCEDURE AddMe_Out
@p1 int = 0,
@p2 int OUTPUT
AS
SELECT @p2 = 10 * @p1
GO
I can connect and run simple queries and call procedures
that don't send their output via an OUTPUT parameter.
I need to call a procedure (AddMe_Out) that DOES return
its results via OUTPUT. I have the following code in which
the simple query, and the first procedure call work. The second
call to the stored procedure 'AddMe_Out' fails with the
error ->"no statement executing at ./sql_test.pl line 38.
That is the fetch.
#----------------------------------------------------------
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("dbi:Sybase:server=www3", 'sqltest', 'spamspam', {PrintError =>
0});
unless ($dbh) { die "Unable for connect to server $DBI::errstr"; }
# Very simple select.
# this one works
$sth = $dbh->prepare("select * from authors");
if($sth->execute) {
while(@dat = $sth->fetchrow)
{ print "@dat\n"; }
}
# a non-OUTPUT flavored call to a stored procedure
# this one works
print "\nCalling a stored procedure -> AddMe \n";
$sth_a = $dbh->prepare( "exec AddMe '43','3'");
if ($sth_a->execute) {
do {
while($d = $sth_a->fetch) {
$id_value = $d->[0];
print "VAL1: $id_value\n";
}
} while($sth_a->{syb_more_results});
}
# AddMe_Out
print "\nCalling a stored procedure -> AddMe_Out \n";
my $sth_b;
$sth_b = $dbh->prepare(
"declare \@p2_output int
exec AddMe_Out '3', \@p2_output output") or
die "Failed to prepare SQL statement", $sth_b->errstr(), "\n";
$sth_b->execute() or die "Failed to execute", $sth_b::errstr, "\n";
while ($data = $sth_b->fetch) { # line 38
print "VAL2: $data\n"; # just trying to print anything
}
#----------------------------------------------------------
It appears that that the 'execute' is failing because the fetch
does not think $sth_b has anything to fetch. I have checked the
stored procedure on the SQL Server via its native interface and
it works there.
Any ideas or comments would be greatly appreciated.
Thanks,
--
John Ulmer