0

ここで、perl と DBI モジュールで奇妙な問題が発生しています。クエリを正常に取得できる場合もありますが、データベースアクセスなどにリモートで関連するコード行を追加すると、次のようなエラーが発生する場合があります。

DBD::Oracle::st fetchrow_array が失敗しました: エラー 実行中のステートメントはありません (おそらく最初に execute を呼び出す必要があります) [ステートメント "select * from (...)"] の script.pl 18 行目。

私は sqlplus を使用して、ここで select コマンドに問題がないことを確認しました (もちろん、スクリプトが時々機能すると言ったのはそのためです!)

perl スクリプトで select コマンドの後にセミコロンを追加すると、次のような別のエラーが発生しました。

DBD::Oracle::db の準備に失敗しました: ORA-00911: 無効な文字 (DBD エラー: 'select * from (...)<*>;' の char 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 に答える