Сбой dbms_metadata.get_ddl () в схеме, отличной от текущего пользователя в Oracle - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно прочитать структуру некоторых объектов базы данных из базы данных оракула.Поэтому я хочу сделать следующее:

select dbms_metadata.get_ddl('TABLE', 'MY_TABLE', 'OTHERUSER') from dual

Это хорошо работает, если я вошел в систему с пользователем OTHERUSER.Но для PROD у меня есть только пользователь, который имеет синонимы и использует эти объекты с этими синонимами.Я могу выбрать информацию TABLE с помощью ALL_TABLES, где я вижу, что владельцем является OTHERUSER, но когда я запускаю этот код выше с другим пользователем, я получаю следующую ошибку:

ORA-31603: object "MY_TABLE" of type TABLE not found in schema "OTHERUSER"
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8666
ORA-06512: at line 1

Это точно насхема OTHERUSER.Что я могу сделать по-другому, чтобы получить этот пробег?Я могу выбрать из ALL_TABLES, ALL_INDEXES и т. Д., Чтобы я мог прочитать информацию в любом случае, так что это может быть не правильной проблемой, или я ошибаюсь?

Я знаю, как обходной путь, я могу использовать процедуру, котораяработает в контексте OTHERUSER, но это более чем безобразно.

1 Ответ

0 голосов
/ 03 апреля 2019

Одно из решений этого описано здесь:

http://dbmsdirect.blogspot.com/2007/10/using-dbmsmetadata-in-procedure-to.html

...