Istnieją dwa podejścia. Możesz wstawić (?, ?, ?)
kilka razy na podstawie rozmiaru tablicy. Manipulacja tekstem wyglądałaby mniej więcej tak:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Następnie spłaszcz tablicę do wywołania execute()
. Unikałbym w ten sposób ze względu na ciernistą manipulację łańcuchami i tablicami, którą należy wykonać.
Innym sposobem jest rozpoczęcie transakcji, a następnie wielokrotne uruchomienie pojedynczej instrukcji INSERT.
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;
Jest to nieco wolniejsze niż pierwsza metoda, ale nadal pozwala uniknąć ponownej analizy instrukcji. Unika również subtelnych manipulacji pierwszego rozwiązania, pozostając jednocześnie atomowym i umożliwiając optymalizację we/wy dysku.