in reply to Re^3: DBI Out parameters
in thread DBI Out parameters

You cannot write:
FUNCTION fred (arg1 OUT INTEGER) RETURN integer;

Yes you can... (and if you do use such output parameters, bind_param_inout is the way to bind/access them).

Replies are listed 'Best First'.
Re^5: DBI Out parameters
by mje (Curate) on Nov 19, 2008 at 16:12 UTC

    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.