少し背景:ループ内でいくつかの操作を実行しているperlスクリプトがあります。
ループ内で、次のようなプリペアドステートメントを作成します。
// inside loop
my $statement = "select xxxx from zzzzzz where $foobar;";
my $query = $connect->prepare($statement);
$query->execute();
$ foobarはループが完了するたびに新しい値に更新されるため、実行するたびにクエリを変更したいのですが、そうしようとするとエラーが発生します。
スクリプトを実行すると、次のエラーが発生します。
DBD::Pg::st execute failed: ERROR: prepared statement "xxxxxxxxxxxxx" already exists at
ループが実行されるたびに更新される変数を渡しているため、このプリペアドステートメントを使用する必要があると仮定すると、このエラーを回避するにはどうすればよいですか?
お時間をいただきありがとうございます。
編集:
この問題を抱えている将来の人々のために、ここでこれをチェックしてください:
私は取得しようとしていました
my $sth = $dbh->prepare('select interval ?');
http://gborg.postgresql.org/pipermail/dbdpg-general/2006-January/001972.html
http://gborg.postgresql.org/pipermail/dbdpg-general/2006-February/002007.html
いくつかの回避策をリストします。pg_server_prepareフラグを使用してサーバー側の準備をオフにするか、たとえばを使用します。'interval?'の代わりに'?::interval'