2012-03-20 69 views
0

我在寫一個perl腳本時遇到問題。當我運行腳本時,它在prepare()之後掛起。我試圖從SQL Developer運行更新語句,它工作正常。無法在perl中執行oracle更新語句

我也試着打印出所有參數,它們是正確的。

我在這裏錯過了什麼?

my $upd = 'update ngs.pp_subscr_data set address=?, city=?, postalcode=?, kennitala=?, email=?, firstname=?, lastname=?, last_upd=systimestamp where snb=?'; 
my $s = $dbh->prepare ($upd) || exitError(-9802, 'Couldn\'t prepare update statement.'); 
$s->execute($addr, $city, $pcode, $ktala, $email, $fname, $lname, $snb) || exitError(-9803, 'Couldn\'t execute statement: ' . $s->errstr); 

謝謝。

+0

如果將'||'更改爲'或',它仍然會掛起嗎? – vol7ron 2012-03-20 17:50:12

+0

如果你編寫'$ dbh-> do('update ... where snb =?',{RaiseError => 1},$ addr,$ city,$ pcode,$ ktala,$ email,$ fname,$ lname, $ SNB);'? – daxim 2012-03-20 17:51:06

+0

如果將「exitError」替換爲「die」,會發生什麼情況:... ||死($ DBI :: errstr)。另外,在Oracle端進行一些會話瀏覽以查看更新是否正在運行......並且我假定您正在執行提交和斷開操作 – tbone 2012-03-20 18:05:11

回答

0

首先,哪個版本的Oracle?

好的,我看到你的描述有幾個問題。當你說「掛斷」時,它真的是一個掛鉤?它會旋轉嗎?

此外,第二,你說「......它準備()後掛起」。這是否意味着在你調用prepare()之後或者在prepare()返回之後它會掛起?

它掛在數據庫中,並且您的客戶端程序正在等待數據庫調用完成嗎?

您需要運行程序,然後查看V $ SESSION,確定與程序的數據庫會話對應的SID,並查看它正在執行的操作。查看V $ SESSION中的EVENT列。此外,請查看STATUS列以確定會話當前是否處於數據庫調用(ACTIVE)中,或等待客戶機程序調用數據庫(INACTIVE)。

回報一些信息,我可能會提供進一步的見解。

希望有所幫助。

+0

嗨馬克。我的數據庫版本是Oracle數據庫10g企業版版本10.2.0.4.0 - 64位。它從prepare()返回,然後在調用execute()時停止/掛起。當我從sql開發者運行「select * from v $ session」時,我得到了ora-00942錯誤,所以我不能給你任何有關會話狀態的信息。 – Gunnlaugur 2012-03-20 18:02:03