1

如何在 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);
     }
4

2 回答 2

1

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

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

您绝对应该花一些时间阅读 CPAN 中文档的存储过程部分,因为它描述了它做什么和不做什么。实际上,喝杯咖啡并阅读所有内容。我已经完成了大量的工作DBD::Sybase,它确实帮助了我。

在 DBD::Sybase 中调用存储过程

于 2013-05-20T11:43:55.860 回答
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; } 
于 2015-09-22T00:29:07.687 回答