Fra dbms_metadata
dokumentation:
Hvis ikke-privilegerede brugere får en eller anden form for adgang til et objekt i en andens skema, vil de være i stand til at hente tildelingsspecifikationen gennem Metadata API, men ikke objektets faktiske metadata.
Så medmindre du er tilsluttet som en privilegeret bruger, kan du ikke se DDL for en anden brugers objekter. Du skal oprette forbindelse som SYS
, eller har SELECT_CATALOG_ROLE
rolle givet til din bruger for at kunne få XT's objektdefinition.
Selv med den rolle:
I lagrede procedurer, funktioner og definers-rights-pakker er roller (såsom SELECT_CATALOG_ROLE) deaktiveret. Derfor kan et sådant PL/SQL-program kun hente metadata for objekter i sit eget skema. Hvis du vil skrive et PL/SQL-program, der henter metadata for objekter i et andet skema (baseret på invokerens besiddelse af SELECT_CATALOG_ROLE), skal du lave programmet invokers-rettigheder.
Hvis du kalder dbms_metadata
fra en anonym PL/SQL-blok, der er ligegyldigt, men hvis du kalder den fra en procedure, skal du inkludere en AUTHID
klausul i procedureerklæringen, tilføjelse af AUTHID CURRENT_USER
.