Mira este
post.
En especial la parte donde el experto afirma:
Cita: Ejemplo:
El usuario A es propietario de la tabla_1 y la tabla_2
El usuario B va a crear un procedimiento que accede a dichas tablas.
Para ello el usuario A le concede permisos sobre la tabla_1 directamente asignados sobre el usuario B.
También le concede permisos al usuario B sobre la tabla_2, pero a través del role_B al que pertenece el usuario B.
Cuando el usuario B compila el procedimiento, le da un error en el acceso a la tabla_2, aunque si hace un select * from USUARIO_A.TABLA_2, le funciona.
El problema le está dando porque el permiso está concedido a través del role. El problema se soluciona concediendo los permisos directamente al usuario_B
Se parece mucho a tu problema, en el sentido que si imprimes la sentencia se ejecuta correctamente pero le es imposible ejecutarla desde el paquete. No se si utilices roles para otorgar permisos a los usuarios sobre las tablas.
saludos