Kemungkinan besar, masalahnya adalah bahwa hibah itu dilakukan melalui peran. Hak istimewa yang diberikan kepada pengguna tidak tersedia dalam prosedur tersimpan hak pendefinisi (default).
Di SQL Developer, relatif mudah untuk memverifikasi bahwa ini masalahnya. Jika Anda menjalankan perintah
SET ROLE none
dan kemudian jalankan pernyataan SELECT, saya berharap Anda akan mendapatkan kesalahan ORA-00942 yang sama.
Dengan asumsi demikian, solusinya umumnya adalah meminta pemilik tabel dalam skema YYY untuk memberikan akses ke tabel secara langsung kepada Anda daripada memberikan akses melalui peran. Kecuali itu, Anda bisa mendefinisikan prosedur tersimpan Anda sebagai prosedur tersimpan hak pemanggil dengan menambahkan AUTHID CURRENT_USER ke deklarasi. Itu akan membuat pemanggil prosedur perlu memiliki akses ke objek yang mendasarinya tetapi itu akan memungkinkan prosedur Anda untuk menggunakan hak istimewa yang diberikan melalui peran.
Jika Anda ingin membuat prosedur tersimpan hak pemanggil, Anda juga perlu merujuk ke nama tabel menggunakan SQL dinamis untuk menunda pemeriksaan hak istimewa ke runtime. Jadi Anda akan memiliki sesuatu seperti
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;
jika Anda menginginkan prosedur tersimpan hak pemanggil yang menanyakan tabel TableA dalam skema XXX.