2010-02-11 7 views

답변

166

다른 스키마에있는 모든 테이블을 확인하려면 다음과 같은 시스템 권한 중 하나 이상을 가지고해야합니다

SELECT ANY DICTIONARY 
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE 

또는 큰 망치는 DBA 역할을.

그 어떤으로

, 당신이 선택할 수 있습니다 : 그 시스템 권한없이

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
WHERE OBJECT_TYPE = 'TABLE' 
    AND OWNER = '[some other schema]' 

을, 당신은 당신이 직접 여부 역할을 통해 액세스 어느 정도의 권한이 부여 된 테이블을 볼 수 있습니다.

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
WHERE OBJECT_TYPE = 'TABLE' 
    AND OWNER = '[some other schema]' 

마지막으로, 당신은 항상 당신의 테이블에 대한 귀하의 권리는 (10g 기준) 취소 할 수 없기 때문에, 자신의 테이블에 대한 데이터 사전을 조회 할 수 있습니다

SELECT DISTINCT OBJECT_NAME 
    FROM USER_OBJECTS 
WHERE OBJECT_TYPE = 'TABLE' 
+2

은'% _TABLES' 대신'% _OBJECTS'를 사용하는 것과는 별개로 "가장 완벽한 답변"입니다. – APC

+0

9i에서 뷰가 % _TABLES에 나열된다는 것을 기억합니다. 예를 들어, 스키마 비우기를 자동화하려고하면 DROP TABLE REALLY_A_VIEW CASCADE CONSTRAINTS 오류가 발생합니다. 따라서 MINUS/NOT IN/NOT EXISTS로보기를 제거하거나 % _OBJECTS를 다시 이동해야합니다. 게다가 % _OBJECTS와 (과)가는 것은 그 밖에 무엇이 있을지를 암시합니다. –

+1

쿼리에 'DISTINCT'가 필요하지 않습니다. 'owner, object_name'는 ALL_OBJECTS에서 유일합니다. –

11

당신은 USER_TABLES

select TABLE_NAME from user_tables 
+4

이것은 스키마에있는 모든 테이블이며 스키마의 모든 테이블은 아닙니다. 또한 * _TABLES 데이터 딕셔너리 뷰 (DBA_TABLES, ALL_TABLES, USER_TABLES)에는 뷰가 포함됩니다. –

+0

"보기 포함"을 "세미 버전의 Oracle에보기 포함 가능"으로 바꿉니다. –

+0

@ Adam Musch Oracle 10g R2를 사용하여 테스트했지만보기를 반환하지 않았습니다. – Sathya

3

이 시도 조회 할 수 있습니다, 대체? 스키마 이름 사용

select TABLE_NAME from INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA =? 
    AND TABLE_TYPE = 'BASE TABLE' 
+1

이것은 더 많은 데이터베이스에 무관심하므로이 유형의 솔루션이 모든 대안보다 우수하다고 생각합니다. 나는 INFORMATION_SCHEMA가 내가 본 모든 거의 모든 주요 데이터베이스에서 작동한다고 생각한다. 어떤 정보는 당신이 나갈 수있는 점에서 차이가 있지만, 적어도 일관된 곳입니다. 그러나 빠른 인터넷 검색을 통해 오라클은 SQL-92 표준의 일부 임에도 불구하고 Information_Schema를 지원하지 않는 유일한 데이터베이스 일뿐입니다. – Kibbee

+5

물론 OP는 오라클 솔루션을 요구합니다 ... – DCookie

52
SELECT table_name from all_tables where owner = 'YOURSCHEMA'; 
+4

schemanaame은 대문자이어야합니다 –

+2

YOURSCHEMA가 실행하거나 Adam Musch가 언급 한 권한을 가진 사용자가 실행하면 YOURSCHEMA의 모든 테이블 만 표시됩니다. 그렇지 않으면 우리에게 권한이 부여 된 테이블이 YOURSCHEMA에 표시됩니다. – APC

2

당신이 JDBC (자바)와 오라클 액세스하는 경우 DatabaseMetadata 클래스를 사용할 수 있습니다 : 그것은 기반으로합니다. ADO.NET을 사용하여 Oracle에 액세스하는 경우 비슷한 방법을 사용할 수 있습니다.

ODBC를 사용하여 Oracle에 액세스하는 경우 SQLTables 기능을 사용할 수 있습니다.

SQLPlus 또는 유사한 Oracle 클라이언트에 정보가 필요하면 이미 언급 한 쿼리 중 하나가 수행됩니다. 예를 들어 :

select TABLE_NAME from user_tables 
4

당신이 일반 사용자로 로그인 한 경우 DBA 권한이 없으면 다음 명령을 사용하여 자신의 스키마의 모든 테이블과 뷰를 볼 수 있습니다.

select * from tab; 
1
select * from cat; 

이 user_catalog의 스키마 고양이 동의어에있는 모든 테이블을 표시합니다

당신에게 해당 사용자에 존재하는 모든 테이블의 이름을 줄 것이다 쿼리 위
0
select TABLE_NAME from user_tables; 

;

2
select * from user_tables; 

당신은뿐만 아니라 테이블의 크기를 얻을 필요가있는 경우,이 편리 할 것입니다

0

(모든 테이블을 표시) : ALL_TABLES 곳에서

select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1

1

SELECT TABLE_NAME, 소유자 owner = 'schema_name'order by table_name

관련 문제