Има два подхода. Можете да вмъкнете (?, ?, ?)
няколко пъти в зависимост от размера на масива. Текстовата манипулация би била нещо като:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
След това изравнете масива за извикване на execute()
. Бих избегнал този начин поради трънливите манипулации с низове и масиви, които трябва да се направят.
Другият начин е да започнете транзакция, след което да изпълните един оператор за вмъкване няколко пъти.
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;
Това е малко по-бавно от първия метод, но все пак избягва повторното анализиране на изявлението. Той също така избягва фините манипулации на първото решение, като същевременно е атомичен и позволява оптимизиране на дисковия вход/изход.