Я думаю, что главная проблема в том, что я не понимаю, что делает function(?)
. ?
есть заполнитель для передачи в хранимую процедуру с именем function
? У меня также нет доступа к базе данных, где я могу проверить свое понимание этого. Однако разве следующее не работает?
my $sql = SQL::Abstract->new;
my ($st, @values) = $sql->select(
\'function(?)',
'*',
{ group_id => { 'IN' => [ 1 .. 3] } },
);
my $sth = $dbh->prepare($st);
$sth->execute('arg1', @values);
В моем случае $st
содержит:
SELECT * FROM function(?) WHERE ( group_id IN ( ?, ?, ? ) )
Если это не сработает, то как насчет:
my ($st, @values) = build_select_for_function(
function => [ qw(arg1) ],
'*',
{ group_id => { 'IN' => [ 1 .. 3] } },
);
print $st, "\n";
sub build_select_for_function {
my ($func, $args, @sql_abstract_args) = @_;
my $func_str = sprintf '%s(%s)', $func, join(',', @$args);
my $sql = SQL::Abstract->new;
$sql->select(
\$func_str,
@sql_abstract_args,
);
}
Выход:
SELECT * FROM function(arg1) WHERE ( group_id IN ( ?, ?, ? ) )