Oracle에서 개체의 소유자를 어떻게 찾을 수 있습니까?
테이블의 외부 키를 찾고 싶지만 이름이 같은 테이블의 사용자/스키마가 둘 이상 있을 수 있습니다.현재 로그에 기록된 사용자가 보고 있는 항목을 어떻게 찾을 수 있습니까?주인에게 주는 기능이 있습니까?만약 공개 동의어가 있다면요?
ALL_OBJECTS 보기를 쿼리할 수 있습니다.
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = 'FOO'
동의어 찾기
select *
from ALL_SYNONYMS
where synonym_name = 'FOO'
분명히 말씀드리자면, 만약에
사용자 사용자의 SQL 문은 스키마 자격이 없는 개체 이름을 참조합니다(예: 'FOO'). Oracle은 먼저 사용자의 스키마에서 해당 이름의 개체(사용자 스키마의 동의어 포함)를 확인합니다.Oracle이 사용자 스키마에서 참조를 확인할 수 없는 경우 Oracle은 공용 동의어를 확인합니다.
특정 table_name에 대한 제약 조건을 구체적으로 찾는 경우
select c.*
from all_constraints c
where c.table_name = 'FOO'
union all
select cs.*
from all_constraints cs
join all_synonyms s
on (s.table_name = cs.table_name
and s.table_owner = cs.owner
and s.synonym_name = 'FOO'
)
HTH
부록:
사용자에게 DBA_view에 대한 액세스 권한이 부여된 경우(예: 사용자에게 SELECT_CATALOG_ROLE이 부여된 경우) '로 대체할 수 있습니다.DBA_
을 대신하여ALL_
앞의 SQL 예제에서 사용할 수 있습니다.그ALL_x
보기에는 권한이 부여된 개체만 표시됩니다.그DBA_x
보기는 권한이 있는지 여부에 관계없이 모든 데이터베이스 개체를 표시합니다.
저는 Oracle에서 테이블의 주인을 찾는 방법을 구글링하면서 이 질문이 최고의 결과라고 생각했기 때문에 다른 사람들의 편의를 위해 테이블에 대한 답변을 제공할 것이라고 생각했습니다.
오라클 DB에서 특정 테이블의 소유자를 찾으려면 다음 쿼리를 사용하십시오.
select owner from ALL_TABLES where TABLE_NAME ='<MY-TABLE-NAME>';
흥미로운 질문 - 이 기능을 수행하는 Oracle 함수는 없을 것 같습니다(UNIX의 "which" 명령과 거의 유사). 그러나 이름에 대한 해결 순서는 다음과 같습니다.
select * from
(
select object_name objname, object_type, 'my object' details, 1 resolveOrder
from user_objects
where object_type not like 'SYNONYM'
union all
select synonym_name obj , 'my synonym', table_owner||'.'||table_name, 2 resolveOrder
from user_synonyms
union all
select synonym_name obj , 'public synonym', table_owner||'.'||table_name, 3 resolveOrder
from all_synonyms where owner = 'PUBLIC'
)
where objname like upper('&objOfInterest')
ALL_TABLES 및 ALL_CONSTARGS와 같은 Oracle 뷰에는 쿼리를 제한하는 데 사용할 수 있는 소유자 열이 있습니다.현재 사용자가 액세스할 수 있는 개체만 나열하는 ALL 대신 USER로 시작하는 이러한 테이블의 변형도 있습니다.
이러한 보기 중 하나가 문제를 해결하는 데 도움이 될 것입니다.그들은 항상 비슷한 문제로 저를 위해 잘 일했습니다.
Oracle 세션 내에서 현재 사용자의 이름을 찾으려면USER
기능.
제약 조건의 소유자, 외부 키가 포함된 테이블의 소유자 및 참조된 테이블의 소유자는 모두 다를 수 있습니다.관심 있는 테이블 소유자인 것처럼 들리지만, 이 경우에는 원하는 것에 근접해야 합니다.
select Constraint_Name
from All_Constraints
where Table_Name = 'WHICHEVER_TABLE'
and Constraint_Type = 'R' and Owner = User;
@entpnerd가 말했듯이, 저는 당신이 opper() 절을 사용할 것을 제안합니다.
select *
from ALL_TABLES
where upper(TABLE_NAME) = upper('<table_name>')
언급URL : https://stackoverflow.com/questions/947140/how-can-i-find-the-owner-of-an-object-in-oracle
'IT' 카테고리의 다른 글
클라우드 함수에서 Google Cloud SQL을 연결하는 방법은 무엇입니까? (0) | 2023.06.17 |
---|---|
C에서 정적 변수의 초기화 (0) | 2023.06.17 |
bash 스크립트에서 테이블 mariadb 업데이트 (0) | 2023.06.17 |
Angular 2 이상 변수 업데이트/액세스가 완료될 때까지 구독 대기 (0) | 2023.06.17 |
서비스 파일의 디스패치 돌연변이 (0) | 2023.06.17 |