Najprawdopodobniej problem polega na tym, że grant został zrealizowany poprzez rolę. Uprawnienia przyznane użytkownikowi nie są dostępne w procedurze składowanej praw definiującego (domyślnie).
W SQL Developer stosunkowo łatwo jest zweryfikować, czy to jest problem. Jeśli uruchomisz polecenie
SET ROLE none
a następnie uruchom instrukcję SELECT, spodziewałbym się, że otrzymasz ten sam błąd ORA-00942.
Zakładając, że tak jest, rozwiązaniem byłoby zazwyczaj poproszenie właścicieli tabel w schemacie YYY o przyznanie dostępu do tabel bezpośrednio Tobie, zamiast udzielania dostępu za pośrednictwem roli. Poza tym można zdefiniować procedurę składowaną jako procedurę składowaną praw podmiotu wywołującego, dodając do deklaracji AUTHID CURRENT_USER. Oznaczałoby to, że osoba wywołująca procedurę musiałaby mieć dostęp do podstawowych obiektów, ale umożliwiłoby to procedurom korzystanie z uprawnień przyznanych przez rolę.
Jeśli chcesz utworzyć procedurę składowaną praw osoby wywołującej, musisz również odwołać się do nazwy tabeli za pomocą dynamicznego SQL, aby odroczyć sprawdzanie uprawnień do czasu wykonywania. Więc miałbyś coś takiego
CREATE OR REPLACE PROCEDURE PRC_SOMESP
AUTHID CURRENT_USER
AS
l_cnt pls_integer;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM yyy.TableA' INTO l_cnt;
END PRC_SOMESP;
jeśli chcesz, aby procedura składowana praw wywołującego przeszukiwała tabelę TableA w schemacie XXX.