2011-05-12 284 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;现在一切正在工作:)