sql >> Databasteknik >  >> RDS >> Oracle

dbms_metadata.get_ddl fungerar inte

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 .



  1. Hur man beräknar kumulativ totalsumma i MySQL

  2. Cloud Backup-alternativ för PostgreSQL

  3. Hur man lägger till Active Directory-användargrupp som inloggning i SQL Server

  4. Optimalt sätt att RADERA specificerade rader från Oracle