use Akar::DBI::Statement qw(sql sql_in sql_param sql_param_inout); my $start_date = '2007-06-01'; my $statement = "SELECT id, filetype, filesource_name" . "\nFROM manggis.files " . "\nWHERE filetype IN ". sql_in( qw(durian durianloader_in durianloader_out) ) . "\n AND state IN ". sql_in('f', 'F') . "\n AND created > to_date(". sql_param($start_date ). ", 'YYYY-MM-DD')"; my ( $text, $values_ref ) = $statement->text_and_values; #### # text: 'SELECT id, filetype, filesource_name FROM manggis.files WHERE filetype IN (?, ?, ?) AND state IN (?, ?) AND created > to_date(?, \'YYYY-MM-DD\')' # values_ref is [ 'durian', 'durianloader_in', 'durianloader_out', 'f', 'F', '2007-06-01' ] #### my $cnt_statement = "SELECT count(*) FROM ($statement)"; #### use Interpolation 'sqlp' => sub { sql_param(@_) }, 'E' => 'eval'; $statement = <<"END_SELECT"; SELECT id, filetype, filesource_name FROM manggis.files WHERE filetype IN $E{ sql_in( qw(durian durianloader_in durianloader_out) ) } AND state IN $E{ sql_in('f', 'F') } AND created > to_date( $sqlp{ $start_date } , 'YYYY-MM-DD'); END_SELECT #### my $retval; my $statement = <<"END_PSQL"; BEGIN manggis.create_new_file( 'filetype' => $E{ sql_param($filetype) }, 'file_id' => $E{ sql_param_inout(\$retval, 40) }, ); END; END_PSQL #### $dbh->selectrow_array($statement->text_attr_values); $statement->prepare_and_bind_on($dbh); #### my @row = $dbh->selectrow_array($statement_or_text); my $sth = $dbh->prepare($statement_or_text); #### my $statement2 = sql('SELECT * FROM manggis.files WHERE state = :state'); $statement2->bind_param(':state', 'F');