2011-11-15 86 views
0

我正在MS SQL中使用perl运行存储过程 返回值是一个整数(0 =如果可以,并且某些负值在特定点提前退出) 代码运行SP - 它不给我所有的回报价值。如何获得返回值和SQL存储过程运行使用Perl?

我的代码:

use dbd::odbc; 
#... 
$dbh->do("use XXX"); #Name of the DB 
my $sth = $dbh->prepare(" 
    DECLARE \@return_value int 

    EXEC \@return_value = [dbo].[test1] 
     \@BeginDate = '11/11/2011', 
     \@EndDate = '11/11/2011' 

    select \@return_value 

"); 

$sth->execute(); 

#### AFTER THIS I TRIED: 

while (@dbrow = $sth->fetchrow_array()) { 
    $return_value = @dbrow[0] 
} 

#### i also tried: 

my $return_value = $sth->fetchrow_array() 

#### both get nothing. 

当我使用普通SELECT查询,上述两种工作。

+0

也,上面的程序,如果在SQL Server Management Studio中跑过来给我一个正确的返回值 –

+2

从你的代码,这是很清楚的,你没有启用警告。请确保使用'use warnings'来启用它们;' – ysth

+0

你确定所有东西都在执行吗?您没有检查任何数据库或语句处理方法调用的返回值。 – CanSpice

回答

1

什么确实它返回?试试这个:

while (@dbrow = $sth->fetchrow_array()) { 
    use Data::Dumper; 
    $Data::Dumper::Useqq = 1; 
    print Dumper({ "got row" => \@dbrow }); 
} 
+0

尝试了以上。没有。 如果我打印“我的价值是$ return_value”我会得到我的价值是 如果我尝试使用@dbrow - 同样的事情。基本上它甚至不会去 进入while循环!这意味着SP根本没有返回任何东西。 –

1
  • 尝试在SQL服务器中执行的程序,并确保它返回 ATLEAST一个记录
  • 检查执行语句的返回值,打印错误,如果它不成功

    $ sth-> execute()或死“无法执行:”。 $ sth-> errstr;

  • 检查排从做某事数量

    如果($ sth->行== 0){打印 “零个记录”}

0

我不知道如果这有助于但是你可以试试这个吗?

while ($row_ref = $sth->fetch_arrayref()) { 
    my $return_value = $row_ref->[0]; 
    print $return_value; 
} 
相关问题