sql >> Database >  >> RDS >> Oracle

dbms_metadata.get_ddl werkt niet

Van de dbms_metadata documentatie:

Als niet-bevoorrechte gebruikers op een of andere manier toegang krijgen tot een object in het schema van iemand anders, kunnen ze de toekenningsspecificatie ophalen via de Metadata API, maar niet de daadwerkelijke metadata van het object.

Dus tenzij u bent verbonden als een bevoorrechte gebruiker, kunt u de DDL voor de objecten van een andere gebruiker niet zien. U moet verbinding maken als SYS , of hebben de SELECT_CATALOG_ROLE rol toegekend aan uw gebruiker om de objectdefinitie van XT te krijgen.

Zelfs met die rol:

In opgeslagen procedures, functies en pakketten met definiërsrechten zijn rollen (zoals SELECT_CATALOG_ROLE) uitgeschakeld. Daarom kan zo'n PL/SQL-programma alleen metadata ophalen voor objecten in zijn eigen schema. Als je een PL/SQL-programma wilt schrijven dat metadata ophaalt voor objecten in een ander schema (gebaseerd op het bezit van SELECT_CATALOG_ROLE door de aanroeper), moet je het programma invokers-rechten maken.

Als u dbms_metadata . belt van een anoniem PL/SQL-blok dat er niet toe doet, maar als je het vanuit een procedure aanroept, moet je een AUTHID opnemen clausule in de proceduredeclaratie, met toevoeging van AUTHID CURRENT_USER .



  1. Prestaties van MariaDB Java Connector-stuurprogramma

  2. Deel 3 – Klanten, oproepen en vergaderingen

  3. MySQL #1140 - Mengen van GROEP-kolommen

  4. Geparametriseerde query in Oracle-problemen