Recently I had our DBA create an Oracle account for a new programmer. He was given select access to tables in another schema so is able to perform a select on those tables.
However, when we tried to create a stored function using one of those tables, we kept hitting an error that the table could not be found. Finally, after working with the DBA we found that we also needed "Select Any Table" privilege. It seems strange that we needed this privilege, probably Oracle is using some other table to identify the table when compiling.