我在这里遇到一个与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个字符)?
答案 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;现在一切正常:)