Are there any performance improvement in calling a procedure which returns `SYS_RECURSOR` or call a query?

For example 

```
CREATE OR REPLACE PROCEDURE my_proc
(
  p_id number,
  emp_cursor IN OUT SYS_REFCURSOR
)
AS
BEGIN

OPEN emp_cursor for
select * from emp where emp_number=p_id
end;
/

```

and call the above from `Java` by registering `OUT` parameter,pass `IN` parameter and fetch the results.

Or

From `Java` get the results from `emp` `table` by 

```
preparedStatement = prepareStatement(connection, "select * from emp where emp_number=?", values); 
resultSet = preparedStatement.executeQuery();

```

Which one of the above is a better option to call from `Java`?