我的工作具有多個數據庫調用和Perl腳本我不斷收到以下錯誤:DBLIB錯誤快把我逼瘋了
DB-Library錯誤: 嘗試啓動與成果以待新的SQL Server操作。
在我的代碼,我有以下幾點:
到數據庫中的第一次調用執行多個INSERT語句從哈希內置:
while (my ($key, $value) = each(%holidays)) {
system("log4k", "DEBUG", "$0", "Staging holiday info data for: $cal_name: $key");
$sql = "INSERT INTO stg_holiday_data (hol_mnemonic, hol_date, hol_comment, dml_type) VALUES (\"$cal_name\", $key, \"$value\", \"N\")";
system("log4k", "TRACE", "$0", "SQL being executed: $sql");
if ($test == 0) {
$dbh->dbcmd($sql);
($dbh->dbsqlexec() && $dbh->dbresults)
or &fatalError("Database error in $sql", "DB_ERROR");
while($dbh->dbresults != NO_MORE_RESULTS) {
while(my @dat = $dbh->dbnextrow){}
}
}
}
後立即完成我封閉的連接,並取消它,以確保不存在任何結果留下來發出處理:
$dbh->dbcancel();
$dbh->dbclose();
從那裏我稱之爲一個單獨的子程序來執行存儲的過程,它會產生三行輸出標誌着行號:
子程序調用
&run_sproc() if ($test == 0);
子程序:
sub run_sproc() {
system("log4k", "DEBUG", "$0", "Loading staged holiday data");
my $sql1 = "upd_holiday_data";
system("log4k", "TRACE", "$0", "SQL being executed: $sql1");
my($dbh2) = new Sybase::DBlib $ENV{DATABASE_USER}, $ENV{DATABASE_PASSWORD}, $ENV{DATABASE_SERVER}, "GME_calendar_sync";
&fatalError("Failed to login imagine database", "DB_LOGIN_ERROR") unless ($dbh2);
$dbh2->dbcmd($sql1);
($dbh2->dbsqlexec() && $dbh2->dbresults)
or &fatalError ("Database error in $sql", "DB_ERROR");
while ($dbh2->dbresults != NO_MORE_RESULTS) {
while (my @d = $dbh2->dbnextrow) {
system("log4k", "TRACE", "$0", "Next row being inserted @d");
}
}
$dbh2->dbclose();
}
我有工作正常的存儲過程之後,是第三個SQL塊有或沒有這個子程序。
發生了什麼是我收到存儲過程打印結果之前上面提到的錯誤。我嘗試了所有我能想象得到的結果,以確保所有結果都得到了處理。日誌輸出的樣品低於:
[Tuesday, 23 October 2012 13:30:02 BST] [DEBUG] gme_process_calendars.pl: Staging holiday info data for: CA: 20251226
[Tuesday, 23 October 2012 13:30:03 BST] [TRACE] gme_process_calendars.pl: SQL being executed: INSERT INTO stg_holiday_data (hol_mnemonic, hol_date, hol_comment, dml_type) VALUES ("CA", 20251226, "upload", "N")
[Tuesday, 23 October 2012 13:30:03 BST] [DEBUG] gme_process_calendars.pl: Staging holiday info data for: CA: 20220103
[Tuesday, 23 October 2012 13:30:03 BST] [TRACE] gme_process_calendars.pl: SQL being executed: INSERT INTO stg_holiday_data (hol_mnemonic, hol_date, hol_comment, dml_type) VALUES ("CA", 20220103, "upload", "N")
[Tuesday, 23 October 2012 13:30:03 BST] [DEBUG] gme_process_calendars.pl: Loading staged holiday data
[Tuesday, 23 October 2012 13:30:03 BST] [TRACE] gme_process_calendars.pl: SQL being executed: upd_holiday_data
DB-Library error:
Attempt to initiate a new SQL Server operation with results pending.
[Tuesday, 23 October 2012 13:30:03 BST] [TRACE] gme_process_calendars.pl: Next row being inserted 310107230
任何幫助,這將不勝感激,因爲我已經嘗試了一切我能找到這樣一個互聯網搜索和閱讀文檔。
感謝
我不確定,但也許你應該這樣做: $ dbh-> dbcmd(「exec $ sql1」); – fanlim