Hay dos enfoques. Puede insertar (?, ?, ?)
un número de veces basado en el tamaño de la matriz. La manipulación del texto sería algo como:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Luego aplane la matriz para llamar a execute()
. Evitaría esta forma debido a la manipulación espinosa de cadenas y matrices que debe realizarse.
La otra forma es comenzar una transacción y luego ejecutar una sola declaración de inserción varias veces.
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;
Este es un poco más lento que el primer método, pero aún evita volver a analizar la declaración. También evita las manipulaciones sutiles de la primera solución, sin dejar de ser atómico y permitir que se optimice la E/S del disco.