Från dbms_metadata
dokumentation:
Om icke-privilegierade användare beviljas någon form av åtkomst till ett objekt i någon annans schema, kommer de att kunna hämta tillståndsspecifikationen via Metadata API, men inte objektets faktiska metadata.
Så om du inte är ansluten som en privilegierad användare kan du inte se DDL för en annan användares objekt. Du skulle behöva ansluta som SYS
, eller ha SELECT_CATALOG_ROLE
roll som tilldelas din användare för att kunna få XT:s objektdefinition.
Även med den rollen:
I lagrade procedurer, funktioner och definiers-rights-paket är roller (som SELECT_CATALOG_ROLE) inaktiverade. Därför kan ett sådant PL/SQL-program bara hämta metadata för objekt i sitt eget schema. Om du vill skriva ett PL/SQL-program som hämtar metadata för objekt i ett annat schema (baserat på anroparens innehav av SELECT_CATALOG_ROLE), måste du göra programmet till invokers-rättigheter.
Om du anropar dbms_metadata
från ett anonymt PL/SQL-block som inte spelar någon roll, men om du anropar det från en procedur måste du inkludera en AUTHID
sats i procedurdeklarationen, lägg till AUTHID CURRENT_USER
.