2つのアプローチがあります。 (?, ?, ?)
を挿入できます 配列のサイズに基づいた回数。テキスト操作は次のようになります:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
次に、execute()
を呼び出すために配列をフラット化します 。厄介な文字列と配列の操作を行う必要があるため、この方法は避けます。
もう1つの方法は、トランザクションを開始してから、1つの挿入ステートメントを複数回実行することです。
my $sql = 'INSERT INTO tbl (col1, col2, col3)';
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare_cached( $sql );
$sth->execute( @$_ ) for @array;
$sth->finish;
$dbh->{AutoCommit} = 1;
これは最初の方法よりも少し遅いですが、それでもステートメントの再解析を回避します。また、アトミックでありながらディスクI / Oを最適化しながら、最初のソリューションの微妙な操作を回避します。