0

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

DBD::Oracle::st fetchrow_array failed: ERROR no statement execution (也许你需要先调用 execute) [for Statement "select * from (...)"] at script.pl 第 18 行。

我使用 sqlplus 验证我的选择命令在这里没有问题(当然,这就是为什么我说脚本有时可以工作!)

如果我在 perl 脚本中的 select 命令之后添加了一个分号,我会收到另一个错误消息:

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

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

4

2 回答 2

2

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

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

于 2011-05-12T08:04:07.013 回答
0

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

while ($sth->fetch) {

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

}

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

于 2014-03-21T18:16:30.223 回答