如何在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);
}
答案 0 :(得分:1)
如果您正在使用DBI
和DBD::Sybase
,则存储过程的处理方式与执行任何其他SQL语句的方式完全相同。有一个区别在于它还会为返回状态返回一个额外的结果集。在调用$sth->{ syb_result_type }
方法时,您可以检查CS_STATUS_RESULT
的值以查看它是否为fetch*
。
DBD::Sybase
有点奇怪。考虑到Sybase为开发人员提供的DB-Library,有些事情可能太难了,所以我个人不会责怪作者以这种方式实现驱动程序。 DBD::Sybase
仍然做得很好。
您应该花一些时间阅读CPAN文档的存储过程部分,因为它描述了它的功能和不执行功能。实际上,拿一杯咖啡读完全部。我使用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; }