Най-вероятно проблемът е, че грантът е направен чрез роля. Привилегиите, предоставени на потребител, не са налични в съхранената процедура за права на дефинира (по подразбиране).
В SQL Developer е сравнително лесно да се провери дали това е проблемът. Ако изпълните командата
SET ROLE none
и след това изпълнете оператора SELECT, очаквам да получите същата грешка ORA-00942.
Ако приемем, че случаят е такъв, решението обикновено би било да поискате от собствениците на таблиците в схемата YYY да предоставят достъп до таблиците директно на вас, вместо да предоставят достъп чрез роля. Освен това, можете да дефинирате вашата съхранена процедура като съхранена процедура с права на извикващия, като добавите AUTHID CURRENT_USER към декларацията. Това означава, че извикващият процедурата ще трябва да има достъп до основните обекти, но ще позволи на вашите процедури да използват привилегиите, предоставени чрез роля.
Ако искате да създадете съхранена процедура за правата на извикващия, ще трябва също да се обърнете към името на таблицата, използвайки динамичен SQL, за да отложите проверката на привилегиите до време на изпълнение. Така че ще имате нещо като
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;
ако искате съхранена процедура с правата на извикващия, която е поискала таблицата TableA в схема XXX.