将任意数量的参数传递给perl中的Oracle函数

Chr*_*ney 3 oracle perl

使用现有的perl代码调用具有两个参数的Oracle函数;

my $func = $dbh->prepare
(q
    {
        BEGIN
            :result := myStoredProc(value1 => :Param1, value2 => :Param2);
        END;
    }                       
);
$func->bind_param(":Param1", $opt_a);
$func->bind_param(":Param2", $opt_b);
$func->bind_param_inout(":result", \$result, 20);
$func->execute();
Run Code Online (Sandbox Code Playgroud)

如果我现在想要扩展此功能以允许调用任何存储过程(名称作为参数传递给我认为的perl脚本).

那么可以将任意数量的参数传递给函数调用吗?

Perl绝不是我的强项,所以我不知道这个问题有多难.

我认为这里提出问题的部分是实际的SQL;

BEGIN
    :result := myStoredProc(value1 => :Param1, value2 => :Param2);
END;
Run Code Online (Sandbox Code Playgroud)

我不确定这个代码如何适应任何数量的参数.

如果有人有这方面的经验,我真的很感激你能给予的任何帮助.

谢谢

Eth*_*her 6

像这样的东西会起作用:

sub callStoredFunction
{
    my ($funcName, @parameters) = @_;

    my $paramStr = join(', ',
        map { "value$_ => Param$_" }
            (1 .. scalar(@parameters));

    my $func = $dbh->prepare(sprintf("\n{\nBEGIN\n:result := $funcName( %s );\nEND;", $paramStr));

    for my $paramNum (1 .. scalar(@parameters))
    {
        $func->bind_param(":Param${paramNum}", $parameters[$paramNum]);
    }

    my $result;
    $func->bind_param_inout(":result", \$result, 20);
    $func->execute();
    return $result;
}
Run Code Online (Sandbox Code Playgroud)