dbms_dll.get_ddl이 작동하지 않습니다.
테이블의 DDL을 받고 싶습니다.CARD_TABLE
에XT
스키마
SQL> select dbms_metadata.get_ddl('TABLE','CARD_TABLE','XT') from dual;
ERROR:
ORA-31603: object "CARD_TABLE" of type TABLE not found in
schema "XT"
ORA-06512: at "SYS.DBMS_METADATA", line 5746
ORA-06512: at "SYS.DBMS_METADATA", line 8333
ORA-06512: at line 1
그러나 선택한 쿼리가 작동합니다.
select count(*) from XT.CARD_TABLE;
count(*)
---------
0
문의했습니다dba_objects
그것은 여전히 테이블을 차지했습니다.
SQL> select owner,object_type from DBA_OBJECTS
where object_name='CARD_TABLE' 2
3 ;
PUBLIC SYNONYM
XT TABLE PARTITION
XT TABLE PARTITION
XT TABLE PARTITION
XT TABLE
XT TABLE PARTITION
VAT TABLE
7 rows selected.
설명서에서 다음을 참조하십시오.
권한이 없는 사용자에게 다른 사용자의 스키마에 있는 개체에 대한 액세스 권한이 부여된 경우 메타데이터 API를 통해 허용 사양을 검색할 수 있지만 개체의 실제 메타데이터는 검색할 수 없습니다.
따라서 권한 있는 사용자로 연결되어 있지 않으면 다른 사용자의 개체에 대한 DDL을 볼 수 없습니다.다음과 같이 연결해야 합니다.SYS
아니면 가지고 있습니다.SELECT_CATALOG_ROLE
XT의 개체 정의를 가져올 수 있도록 사용자에게 부여된 역할입니다.
그 역할을 하더라도:
저장 프로시저, 함수 및 정의자 권한 패키지에서 역할(예: SELECT_CATALOG_ROLE)을 사용할 수 없습니다.따라서 이러한 PL/SQL 프로그램은 자체 스키마의 개체에 대한 메타데이터만 가져올 수 있습니다.호출자의 SELECT_CATALOG_ROLE 소유에 따라 다른 스키마의 개체에 대한 메타데이터를 가져오는 PL/SQL 프로그램을 작성하려면 프로그램을 호출자 권한으로 만들어야 합니다.
전화하시는 경우dbms_metadata
익명 PL/SQL 블록에서 온 것은 중요하지 않지만, 프로시저에서 호출하는 경우 프로시저 선언에 절을 포함해야 합니다.AUTHID CURRENT_USER
.
grant SELECT_CATALOG_ROLE to <user> with delegate option;
저한테는 효과가 있어요.절차를 수정한 후 이 작업을 수행합니다.
grant SELECT_CATALOG_ROLE to procedure <procedure name>;
언급URL : https://stackoverflow.com/questions/26026068/dbms-metadata-get-ddl-not-working
'source' 카테고리의 다른 글
VBA의 합계 함수 (0) | 2023.08.26 |
---|---|
PhotoPicker 검색 오류: 오류 도메인=PlugInKit 코드=13 (0) | 2023.08.26 |
MariaDB 창 기능(LAG) (0) | 2023.08.26 |
Android - 스타일링 탐색 모음 (0) | 2023.08.26 |
mysql의 gen_lex_hash.cc 알고리즘을 어떻게 이해합니까? (0) | 2023.08.26 |