簡體   English   中英

Perl執行DBI在循環中執行

[英]Perl Executing DBI execute in Loop

我有一個perl腳本,它使用DBI接口准備一個帶有參數1,2,3,4的語句.pream語句執行一個帶有4個參數的存儲過程。然后它運行一個foreach循環並執行

如果參數不正確,則存儲過程將引發錯誤並執行失敗。 我有興趣打印警告並繼續下一組參數。

在“無效參數”的第一次執行失敗之后,我得到“嘗試啟動具有結果掛起的新Adaptive Server操作”,因為SQL中的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

{ RaiseError => 0, PrintWarn => 1, PrintError => 1 }建議在連接中添加了{ RaiseError => 0, PrintWarn => 1, PrintError => 1 } ,(代碼與你的mekazu完全相同)但它仍然沒有幫助仍然得到相同的錯誤。

在foreach中我獲得成功,迭代1沒有錯誤

迭代2給出了存儲過程錯誤

“數據庫執行失敗。錯誤消息:服務器消息號= 52001嚴重性= 16狀態= 1行= 124服務器= dev過程= sp1 text =數據錯誤:參數無效:P1

迭代3

數據庫執行失敗。 錯誤消息:OpenClient消息:LAYER =(0)ORIGIN =(0)SEVERITY =(78)NUMBER =(51)服務器dev,數據庫dev消息字符串:嘗試啟動新的Adaptive Server操作且結果處於掛起狀態

迭代4

數據庫執行失敗。 錯誤消息:OpenClient消息:LAYER =(0)ORIGIN =(0)SEVERITY =(78)NUMBER =(51)服務器dev,數據庫dev消息字符串:嘗試啟動新的Adaptive Server操作且結果處於掛起狀態

確保在創建句柄時禁用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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM