1

executeステートメントで何かを取得するのは間違っています。コマンドプロンプトで実行すると、永遠にハングするようです。死ぬこともありません。実行にはおそらくパラメータが必要ですか?

#!/usr/bin/perl
use DBI;
use Data::Dumper;

$dbh = DBI->connect('DB', 'NAME', 'PASS',{ LongReadLen => 1000000} ) or die 'Error: cant connect to db';

$st= "update table set the_id = 7 where mid = 23 and tid = 22";

my $UpdateRecord = $dbh->prepare($st)  or die "Couldn't prepare statement: $st".$dbh->errstr;
$UpdateRecord->execute() or die "can not execute $UpdateRecord".$dbh->errstr;
$UpdateRecord->finish;


$dbh->disconnect();

編集:
bind_param()を使用するだけでなく、executeでもバインドを試みましたが、まだハングアップしています。

4

2 に答える 2

0

doの代わりに必要ですprepare

my $UpdatedRecord = $dbh->do($st)  or die "Statement fails: $st".$dbh->errstr;

DBIから

このメソッドは通常、事前に準備できない(ドライバーの制限のため)か、繰り返し実行する必要がない非SELECTステートメントに最も役立ちます。ステートメントハンドルを返さないため(データをフェッチできないため)、SELECTステートメントには使用しないでください。

use DBI;また、ステートメントの先頭に、使用しているdbドライバーモジュールを追加/使用することをお勧めします。

use DBD::Oracle;

また、追加します

厳密に使用します。
警告を使用します。

于 2013-03-27T10:51:17.330 に答える
0

問題は、一度実行する前に切断を入れられないように多数のオブジェクトをロックしたことでした...ええ、そうしないでください。

于 2013-03-27T17:12:40.063 に答える