DBD :: perl中的Oracle和DBI错误

时间:2011-05-12 01:26:02

标签: perl dbi dbd

我在这里遇到一个与perl和DBI模块有关的奇怪问题。我有时可以成功获得查询,但有时,当我添加一行与数据库访问或类似的东西远程相关的代码时,我收到一条错误说:

  

DBD :: Oracle :: st fetchrow_array失败:ERROR没有语句执行(可能需要先调用execute)[for script“select * from(...)”]在script.pl第18行。

我使用sqlplus验证了我的select命令在这里没有问题(当然,这就是我说脚本有时工作的原因!)

如果我在perl脚本中的select命令后添加了分号,我又出现了一个错误:

  

DBD :: Oracle :: db准备失败:ORA-00911:无效字符(DBD错误:错误可能在'select * from(...)< *>中的char 970处的< *>指示符附近;')[for script“select * from(...);”]在script.pl第13行。

有人可以告诉我这里发生了什么吗?是因为sql命令太长了(~900个字符)?

2 个答案:

答案 0 :(得分:2)

该错误意味着您已准备好声明但未执行该声明。如果你准备了一个语句,执行它并获取所有行然后再次调用fetch,你也可以得到它,但我不太确定。在这种情况下,不要将分号放在SQL的末尾,因为它不是必需的。

有关已执行的属性,请参阅https://metacpan.org/pod/DBI#Executed

答案 1 :(得分:0)

我有同样的问题,我注意到在获取后我有一个fetchrow_array,这就是问题所在。

while ($sth->fetch) {

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

}

我删除了sth-> fetchrow_array;现在一切正常:)