Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Perl执行DBI在循环中执行_Sql Server_Perl_Dbi - Fatal编程技术网

Sql server Perl执行DBI在循环中执行

Sql server Perl执行DBI在循环中执行,sql-server,perl,dbi,Sql Server,Perl,Dbi,我有一个perl脚本,它使用DBI接口准备一个带有参数1、2、3、4的语句。prepare语句执行一个带有4个参数的存储过程。然后它运行一个foreach循环并执行 如果参数不正确,存储过程将抛出错误并执行失败。我对打印警告并继续下一组参数感兴趣 在“无效参数”的第一次执行失败后,我在SQL execute中得到“尝试启动一个新的自适应服务器操作,结果挂起”作为errmsg,用于后续循环迭代 foreach my $file (@filelist) { #.. get param1 , p

我有一个perl脚本,它使用DBI接口准备一个带有参数1、2、3、4的语句。prepare语句执行一个带有4个参数的存储过程。然后它运行一个foreach循环并执行

如果参数不正确,存储过程将抛出错误并执行失败。我对打印警告并继续下一组参数感兴趣

在“无效参数”的第一次执行失败后,我在SQL execute中得到“尝试启动一个新的自适应服务器操作,结果挂起”作为errmsg,用于后续循环迭代

foreach my $file (@filelist)
{
  #..  get param1 , param2 , param3, param4 from $file
  unless ( dbh->execute($param1,$param2,$param3,$param4) )
  {
      #print some warning 
      next;
  }
}
如何继续处理此错误

这些是我正在使用的版本

>perl -MDBI -e 'DBI-> installed_versions;'
      Perl            : 5.010001    (x86_64-linux-thread-multi)
      OS              : linux       (2.6.18-348.12.1.el5)
      DBI             : 1.609
      DBD::Sybase     : 1.15
      DBD::Sponge     : 12.010002
      DBD::SQLite     : 1.27
      DBD::Proxy      : install_driver(Proxy) failed: Can't locate  RPC/PlClient.pm in @INC
      DBD::Informix   : 2013.0521
      DBD::Gofer      : 0.011565
      DBD::File       : 0.37
      DBD::ExampleP   : 12.010007
      DBD::DBM        : 0.03
我按照mekazu的建议在connect中添加了
{RaiseError=>0,PrintWarn=>1,PrintError=>1}
(代码与您的mekazu完全相同),但这无助于获得相同的错误

每一次我都获得了成功, 迭代1无错误

迭代2给出了一个存储过程错误

“数据库执行失败。错误消息:服务器消息编号=52001 严重性=16状态=1行=124服务器=开发过程=sp1文本=数据 错误:无效参数:P1

迭代3

数据库执行失败。错误消息:OpenClient消息:层= (0)来源=(0)严重性=(78)编号=(51)服务器开发,数据库 开发人员消息字符串:尝试启动新的自适应服务器 等待结果的操作

迭代4

数据库执行失败。错误消息:OpenClient消息:层= (0)来源=(0)严重性=(78)编号=(51)服务器开发,数据库 开发人员消息字符串:尝试启动新的自适应服务器 等待结果的操作


确保在创建句柄时禁用
RaiseError
(默认值:false)。您可以使用
PrintWarn
(默认值:false)和
PrintError
(默认值:true)保存您自己执行的操作:

$dbh = DBI->connect($dsn, $user, $password,
                { RaiseError => 0, PrintWarn => 1, PrintError => 1 });
my $sth = $dbh->prepare($query);
foreach my $file (@filelist)
{
  #..  get param1 , param2 , param3, param4 from $file
  unless ( $sth->execute($param1,$param2,$param3,$param4) )
  {
      #warning already printed 
      next;
  }
}

确保在创建句柄时禁用
RaiseError
(默认值:false)。您可以使用
PrintWarn
(默认值:false)和
PrintError
(默认值:true)保存您自己执行的操作:

$dbh = DBI->connect($dsn, $user, $password,
                { RaiseError => 0, PrintWarn => 1, PrintError => 1 });
my $sth = $dbh->prepare($query);
foreach my $file (@filelist)
{
  #..  get param1 , param2 , param3, param4 from $file
  unless ( $sth->execute($param1,$param2,$param3,$param4) )
  {
      #warning already printed 
      next;
  }
}

您是否尝试过使用
eval{$dbh->execute(…);}对
$dbh->execute($p1,$p2$”p3,$p4)
进行排序,或者{打印一些警告;下一步;}
?我遇到了相同的错误-数据库执行失败。错误消息:OpenClient消息:LAYER=(0)ORIGIN=(0)SEVERITY=(78)NUMBER=(51)服务器开发人员,数据库开发人员消息字符串:尝试启动一个新的自适应服务器操作,结果待定如何清除此错误。我不清楚这是DBI还是SQL错误。看起来该错误来自SQL server。你知道它是在你的程序中发布的吗?您的代码没有通过DBI进行任何错误处理。这是DBI在
执行中可能做的事情吗?在foo.pm第123行的错误消息中是否有您没有显示的内容?在示例DDL中添加您正在访问的存储过程和/或表的
CREATE
,以及准备创建此错误的语句以及准备的Perl代码将有所帮助。您可以通过这个问题添加一个。什么DBI版本,什么DBD驱动程序和版本?您是否尝试过使用
eval{$dbh->execute(…);}对
$dbh->execute($p1,$p2$”p3,$p4)
进行排序,或者{打印一些警告;下一步;}
?我收到了相同的错误-数据库执行失败。错误消息:OpenClient消息:LAYER=(0)ORIGIN=(0)SEVERITY=(78)NUMBER=(51)服务器开发人员,数据库开发人员消息字符串:尝试启动一个新的Adaptive Server操作,结果待定。如何清除此错误。我不清楚这是DBI还是SQL错误。该错误似乎来自SQL Server。您知道该错误在程序中的何处发出吗?您的代码没有通过DBI进行任何错误处理。是否为DBI在
execute
中可能会做些什么?在foo.pm第123行的错误消息中是否有您没有显示的内容?添加示例DDL,其中包含您正在访问的存储过程和/或表的
CREATE
,以及您准备创建此错误的语句以及准备的Perl代码p、 你可以通过这个问题添加一个。什么DBI版本,什么DBD驱动程序和版本?这个