【问题标题】:How to execute stored procedure in perl?perl如何执行存储过程?
【发布时间】:2013-05-14 18:34:18
【问题描述】:

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

【问题讨论】:

  • 这是在 perl 中将数据库结果保存到 .csv 文件的正确方法吗?
  • 连接字符串的外观如何? GetAllBooks 返回什么?
  • 这将为每行结果打开、附加和关闭文件。这是非常低效的。您应该将openclose 命令放在while 循环之外。此外,使用三参数打开和词法文件句柄:open my $fh, '>>', 'Output.csv'print $fh "string"$csv_record 是干什么用的?你的代码有效吗?

标签: perl sybase


【解决方案1】:

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

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

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

Calling Stored Procedures in DBD::Sybase

【讨论】:

  • @amesee :我实现的方式是 $varible = "exec [procedure name]"; & 使用 DBI 模块
【解决方案2】:

就是这样:

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

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2018-03-12
    • 2017-06-21
    • 2010-12-23
    • 2010-09-15
    • 1970-01-01
    • 2016-04-02
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多