Sandsynligvis er problemet, at bevillingen er sket via en rolle. Privilegier tildelt en bruger er ikke tilgængelige i en definerers lagrede rettigheder (standard).
I SQL Developer er det relativt nemt at verificere, at dette er problemet. Hvis du kører kommandoen
SET ROLE none
og derefter køre SELECT-sætningen, ville jeg forvente, at du ville få den samme ORA-00942-fejl.
Hvis det antages, at det er tilfældet, vil løsningen generelt være at bede ejerne af tabellerne i YYY-skemaet om at give adgang til tabellerne direkte til dig i stedet for at give adgang via en rolle. Bortset fra det, kan du definere din lagrede procedure som en lagret procedure for invoker-rettigheder ved at tilføje AUTHID CURRENT_USER til erklæringen. Det betyder, at den, der kalder proceduren, skulle have adgang til de underliggende objekter, men det ville tillade dine procedurer at gøre brug af privilegier givet gennem en rolle.
Hvis du vil oprette en lagret procedure for invoker-rettigheder, skal du også referere til tabelnavnet ved hjælp af dynamisk SQL for at udskyde privilegiekontrollen til runtime. Så du ville have noget lignende
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;
hvis du ønskede en procedure for en påberåbers rettigheder lagret, der forespurgte tabellen TabelA i skema XXX.