Dari dbms_metadata
dokumentasi:
Jika pengguna yang tidak memiliki hak istimewa diberikan beberapa bentuk akses ke objek dalam skema orang lain, mereka akan dapat mengambil spesifikasi pemberian melalui Metadata API, tetapi bukan metadata objek yang sebenarnya.
Jadi, kecuali Anda terhubung sebagai pengguna yang memiliki hak istimewa, Anda tidak dapat melihat DDL untuk objek pengguna lain. Anda harus terhubung sebagai SYS
, atau minta SELECT_CATALOG_ROLE
peran yang diberikan kepada pengguna Anda untuk bisa mendapatkan definisi objek XT.
Bahkan dengan peran itu:
Dalam prosedur tersimpan, fungsi, dan paket hak-pendefinisi, peran (seperti SELECT_CATALOG_ROLE) dinonaktifkan. Oleh karena itu, program PL/SQL seperti itu hanya dapat mengambil metadata untuk objek dalam skemanya sendiri. Jika Anda ingin menulis program PL/SQL yang mengambil metadata untuk objek dalam skema yang berbeda (berdasarkan kepemilikan SELECT_CATALOG_ROLE oleh pemanggil), Anda harus membuat program ini sebagai hak-hak.
Jika Anda memanggil dbms_metadata
dari blok PL/SQL anonim yang tidak masalah, tetapi jika Anda memanggilnya dari prosedur, Anda harus menyertakan AUTHID
klausa dalam deklarasi prosedur, menambahkan AUTHID CURRENT_USER
.