sub Create($$$) { my $dbh = shift(@_); my @parameters = @_; my $return_value; eval { my $func = $dbh->prepare(q{ DECLARE returned_cursor foo_CURSOR; returned_row foo_view%ROWTYPE; BEGIN returned_cursor := foo.fn( :parameter1, ); FETCH returned_cursor INTO returned_row; :id := returned_row.id; END; }); $func->bind_param(":parameter1", $parameters[1]); $func->bind_param_inout(":id", \$return_value, 1); $func->execute; }; }