Há uma grande chance de que os privilégios para selecionar da tabela1 tenham sido concedidos a uma função e a função tenha sido concedida a você. Privilégios concedidos a uma função não estão disponíveis para PL/SQL gravado por um usuário, mesmo que o usuário tenha recebido a função.
Você vê muito isso para usuários que receberam a função dba em objetos pertencentes a sys. Um usuário com função de dba poderá, digamos,
SELECT * from V$SESSION
, mas não poderá escrever uma função que inclua SELECT * FROM V$SESSION
. A correção é conceder permissões explícitas no objeto em questão diretamente ao usuário, por exemplo, no caso acima, o usuário SYS deve
GRANT SELECT ON V_$SESSION TO MyUser;