2011-05-12 282 views
0

我在這裏有一個奇怪的問題與perl和DBI模塊。我可以得到查詢成功有時,但有時,當我添加一行代碼被遠程相關數據庫訪問之類的東西,我得到了一個錯誤說:DBD :: Oracle和DBI錯誤perl

DBD::Oracle::st fetchrow_array failed: ERROR no statement executing (perhaps you need to call execute first) [for Statement "select * from (...)"] at script.pl line 18.

我驗證用sqlplus我的選擇命令在這裏有沒有問題(當然,這就是爲什麼我說劇本有時工作!)

如果我在perl腳本選擇命令後加分號,我得到了另一個錯誤說:

DBD::Oracle::db prepare failed: ORA-00911: invalid character (DBD ERROR: error possibly near <*> indicator at char 970 in 'select * from (...)<*>;') [for Statement "select * from (...);"] at script.pl line 13.

任何人都可以請告訴我他發生了什麼事回覆?是否因爲sql命令太長(〜900個字符)?

+1

您應該向我們展示腳本 - 或者前20行左右。有可能是你在循環中做了一些干擾你的陳述的事情。您是否閱讀過文檔?看看'perldoc DBD :: Oracle'或[DBD :: Oracle](http://search.cpan.org/perldoc?DBD::Oracle);還有'perldoc DBI'或[DBI](http://search.cpan.org/perldoc?DBI)。一些驅動程序在同時激活兩個語句句柄或類似規則方面存在很多限制。 – 2011-05-12 04:18:14

回答

2

該錯誤表示您已準備好聲明,但未執行聲明。如果您準備了一個語句,執行它並獲取了所有行然後再次調用獲取,但您對此可能還不太確定。在這種情況下,不要將分號放在SQL的末尾,因爲它不是必需的。

有關執行屬性,請參見https://metacpan.org/pod/DBI#Executed

+0

感謝您的回覆。我在'prepare()'後面有'execute()',並且只使用了'fetchrow_array'一次。我現在知道我不應該在我的SQL結尾放置分號。但我仍然得到奇怪的錯誤。 – 2011-05-12 19:33:55

+0

讓我們看看更多的代碼。 「 – bohica 2011-05-17 10:39:42

+0

」在這種情況下,不要將分號放在SQL的末尾,因爲它不需要**。「 - 這更像**不正確**而不是不要求,我的問題原來就是這樣。 – mavili 2016-05-17 07:38:39

0

我有同樣的問題,我注意到我有一個fetchrow_array後提取,這是問題。

while ($sth->fetch) { 

    sth->fetchrow_array; 
    $myvar = some logic here 
    $myvar2 = some other logic here 

} 

我刪除了sth-> fetchrow_array;現在一切正在工作:)