Ci sono due approcci. Puoi inserire (?, ?, ?)
un numero di volte in base alla dimensione dell'array. La manipolazione del testo sarebbe qualcosa del tipo:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Quindi appiattisci l'array per chiamare execute()
. Eviterei questo modo a causa delle spinose manipolazioni di stringhe e array che devono essere eseguite.
L'altro modo consiste nell'iniziare una transazione, quindi eseguire più volte una singola istruzione di inserimento.
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;
Questo è un po' più lento del primo metodo, ma evita comunque di riesaminare l'istruzione. Evita anche le sottili manipolazioni della prima soluzione, pur essendo atomica e consentendo l'ottimizzazione dell'I/O del disco.