You are right you can do that - I didn't know that. I use functions mostly in SQL and procedures if there is more than one parameter to return but as you say the following does work:
use DBI;
use strict;
my $h = DBI->connect('dbi:Oracle:xxx','xxx','xxx');
eval {$h->do(q{drop function fred});};
my $sql = <<'EOT';
create function fred(a OUT integer) return integer as
begin
a := 1;
return (a + 1);
end;
EOT
$h->do($sql);
my $s = $h->prepare(q{begin ? := fred(?); end;});
my $in = 1;
$s->bind_param_inout(2, \$in, 100);
my $res;
$s->bind_param_inout(1, \$res, 100);
$s->execute;
print "fred=$res, a=$in\n";
outputs fred=2, a=1
However, I still stand by the my comment that if the parameter is an input parameter it is probably better to bind it with bind_param and not bind_param_inout.
|