दो दृष्टिकोण हैं। आप (?, ?, ?)
. डाल सकते हैं सरणी के आकार के आधार पर कई बार। टेक्स्ट में हेरफेर कुछ इस तरह होगा:
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
फिर execute()
. को कॉल करने के लिए ऐरे को समतल करें . कांटेदार स्ट्रिंग और सरणी हेरफेर के कारण मैं इस तरह से बचूंगा जिसे करने की आवश्यकता है।
दूसरा तरीका है लेन-देन शुरू करना, फिर एक ही इंसर्ट स्टेटमेंट को कई बार चलाना।
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;
यह पहली विधि की तुलना में थोड़ा धीमा है, लेकिन यह अभी भी कथन को दोबारा करने से बचाता है। यह पहले समाधान के सूक्ष्म जोड़तोड़ से भी बचता है, जबकि अभी भी परमाणु है और डिस्क I/O को अनुकूलित करने की अनुमति देता है।