От dbms_metadata
документация:
Ако на непривилегированите потребители се предостави някаква форма на достъп до обект в схемата на някой друг, те ще могат да извлекат спецификацията за предоставяне чрез API за метаданни, но не и действителните метаданни на обекта.
Така че освен ако не сте свързани като привилегирован потребител, не можете да видите DDL за обекти на друг потребител. Ще трябва да се свържете като SYS
, или да имате SELECT_CATALOG_ROLE
роля, предоставена на вашия потребител, за да може да получи дефиницията на обекта на XT.
Дори и с тази роля:
В съхранените процедури, функции и пакети с права за дефиниране ролите (като SELECT_CATALOG_ROLE) са забранени. Следователно, такава PL/SQL програма може да извлича само метаданни за обекти в собствената си схема. Ако искате да напишете PL/SQL програма, която извлича метаданни за обекти в различна схема (въз основа на притежаването на SELECT_CATALOG_ROLE от извикващия), трябва да направите програмата invokers-rights.
Ако се обаждате на dbms_metadata
от анонимен PL/SQL блок, който няма значение, но ако го извиквате от процедура, ще трябва да включите AUTHID
клауза в декларацията на процедурата, добавяйки AUTHID CURRENT_USER
.