如何在perl中执行存储过程?

时间:2013-05-20 08:31:55

标签: perl sybase

如何在perl脚本中执行sybase存储过程**“ dbo.xyz ”?

my $procedure = "call dbo.GetAllBooks";
my $ExecProc = $dbh -> prepare($procedure) or die "Unable to prepare '$procedure'";
$ExecProc -> execute();

while (@data = $ExecProc->fetchrow_array)
     {
         open (FH, ">>Output.csv") or die "Could not open file Output.csv: $!";
         print FH "@data $csv_record .\n";;
         close (Output.csv);
     }

2 个答案:

答案 0 :(得分:1)

如果您正在使用DBIDBD::Sybase,则存储过程的处理方式与执行任何其他SQL语句的方式完全相同。有一个区别在于它还会为返回状态返回一个额外的结果集。在调用$sth->{ syb_result_type }方法时,您可以检查CS_STATUS_RESULT的值以查看它是否为fetch*

但是,与其他数据库驱动程序相比,

DBD::Sybase有点奇怪。考虑到Sybase为开发人员提供的DB-Library,有些事情可能太难了,所以我个人不会责怪作者以这种方式实现驱动程序。 DBD::Sybase仍然做得很好。

您应该花一些时间阅读CPAN文档的存储过程部分,因为它描述了它的功能和不执行功能。实际上,拿一杯咖啡读完全部。我使用DBD::Sybase完成了大量的工作,它确实帮助了我。

Calling Stored Procedures in DBD::Sybase

答案 1 :(得分:0)

完全像这样:

my $sql = qq{ BEGIN  SCHEMA_NAME.STORED_PROC_NAME(); END;};
my $sth = $dbh->prepare($sql)  || die $sth->$DBI::errstr;
$sth->execute  || die $sth->errstr; }