my @insert_cols = qw/BS queue_name in_q_per in_q_num out_q_per out_q_num/; my @inner_keys = @insert_cols[2..5]; my $dbh = DBI->connect( 'whatever...', 'name', 'pswd' ); my $insert_sth = $dbh->prepare( 'insert into my_table (' . join( ',', @insert_cols ) . ') values (' . join( ',', ('?') x @insert_cols ) . ')' ); for my $BS ( keys %HoH ) { for my $queue_name ( keys %{ $HoH{ $BS }} ) { my @nums = @{ $HoH{ $BS }{ $queue_name }} { @inner_keys }; $insert_sth->execute( $BS, $queue_name, @nums ); } }