[英]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.