Existem duas abordagens. Você pode inserir
(?, ?, ?)
várias vezes com base no tamanho da matriz. A manipulação do texto seria algo como:my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Em seguida, nivele o array para chamar
execute()
. Eu evitaria esse caminho por causa da manipulação espinhosa de strings e arrays que precisa ser feita. A outra maneira é iniciar uma transação e, em seguida, executar uma única instrução de inserção várias vezes.
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;
Isso é um pouco mais lento que o primeiro método, mas ainda evita a nova análise da instrução. Ele também evita as manipulações sutis da primeira solução, enquanto ainda é atômico e permite que a E/S do disco seja otimizada.