Existují dva přístupy. Můžete vložit (?, ?, ?)
několikrát na základě velikosti pole. Manipulace s textem by byla něco jako:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
Poté sloučte pole pro volání execute()
. Tomuto způsobu bych se vyhnul kvůli ožehavé manipulaci s řetězci a poli, kterou je třeba provést.
Druhým způsobem je zahájit transakci a poté několikrát spustit jeden příkaz vložení.
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;
Je to o něco pomalejší než první metoda, ale stále se vyhne přepracování příkazu. Vyhýbá se také jemným manipulacím s prvním řešením, přičemž je stále atomické a umožňuje optimalizaci diskových I/O.