[sql] Oracle의 모든 테이블 목록을 가져 오시겠습니까?

Oracle 데이터베이스를 쿼리하여 모든 테이블의 이름을 표시하려면 어떻게합니까?



답변

SELECT owner, table_name
  FROM dba_tables

DBA_TABLES데이터 사전보기에 액세스 할 수 있다고 가정합니다 . 해당 권한이 없지만 필요한 경우 DBA가 해당 테이블에 대한 권한을 명시 적으로 부여하도록 요청하거나 DBA 가 사용자에게 데이터 사전 테이블을 조회 할 수 있는 SELECT ANY DICTIONARY권한 또는 SELECT_CATALOG_ROLE역할을 부여하도록 요청할 수 있습니다. ). 물론, 당신은 같은 특정 스키마 제외 할 수 있습니다 SYS그리고 SYSTEM당신은 아마 걱정하지 않습니다 오라클 테이블의 많은 수 있습니다.

또는에 액세스 할 수없는 경우 보기 DBA_TABLES를 통해 계정이 액세스 할 수있는 모든 테이블을 ALL_TABLES볼 수 있습니다.

SELECT owner, table_name
  FROM all_tables

그러나 데이터베이스에서 사용 가능한 테이블의 서브 세트 일 수도 있습니다 ( ALL_TABLES사용자에게 액세스 권한이 부여 된 모든 테이블에 대한 정보가 표시됨).

액세스 권한이있는 테이블이 아니라 소유 한 테이블에만 관심이있는 경우 다음을 사용할 수 있습니다 USER_TABLES.

SELECT table_name
  FROM user_tables

USER_TABLES소유하고있는 테이블에 대한 정보 만 있기 때문에 OWNER열 이 없습니다 . 정의에 따라 소유자는 사용자입니다.

오라클은 기존 데이터의 수를 사전 views–가 TAB, DICT, TABS, 및 CAT그 example–에 사용될 수있다. 일반적으로 스크립트를 Oracle 6으로 백 포트해야하는 경우가 아니라면 이러한 레거시보기를 사용하지 않는 것이 좋습니다. Oracle은 이러한보기를 오랫동안 변경하지 않았기 때문에 종종 새로운 유형의 객체에 문제가 있습니다. 예를 들어 TABCAT보기는 모두 사용자 휴지통에있는 테이블에 대한 정보를 표시하지만보기는 모두 테이블을 [DBA|ALL|USER]_TABLES필터링합니다. CAT또한 TABLE_TYPE“TABLE”을 사용하여 구체화 된 뷰 로그에 대한 정보를 표시합니다 . DICT테이블과 동의어를 결합하고 누가 객체를 소유하고 있는지 말하지 않습니다.


답변

쿼리 user_tables하고 dba_tables작동하지 않았습니다.
이것은 한 일 :

select table_name from all_tables  


답변

한 단계 더 나아가면 주어진 열 이름을 포함하는 테이블을 확인하는 데 사용할 수있는 cols (all_tab_columns)라는 또 다른 뷰가 있습니다.

예를 들면 다음과 같습니다.

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

이름이 EST로 시작하는 모든 테이블과 이름의 CALLREF를 포함하는 열을 찾습니다.

예를 들어 테이블 및 열 이름 지정 규칙에 따라 조인하려는 열을 작업 할 때 도움이됩니다.


답변

보다 나은 시청을 위해 sqlplus

사용 sqlplus하는 경우 열이 엉망이되면 더 잘 볼 수 있도록 몇 가지 매개 변수를 먼저 설정해야 할 수 있습니다 (이 변수는 sqlplus세션 을 종료 한 후에도 지속되지 않아야 함 ).

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

모든 테이블 표시

그런 다음 이와 같은 것을 사용하여 모든 테이블 이름을 볼 수 있습니다.

SELECT table_name, owner, tablespace_name FROM all_tables;

소유 한 테이블 표시

@Justin Cave가 언급했듯이 이것을 사용하여 소유 한 테이블 만 표시 할 수 있습니다.

SELECT table_name FROM user_tables;

조회수를 잊지 마세요

일부 “테이블”은 실제로 “조회”일 수 있으므로 다음과 같은 방법으로 실행할 수도 있습니다.

SELECT view_name FROM all_views;

결과

이렇게하면 다음과 같이 상당히 수용 가능한 것으로 보입니다.

결과


답변

현재 사용자의 테이블을 선택하는 간단한 쿼리 :

  SELECT table_name FROM user_tables;


답변

    select object_name from user_objects where object_type='TABLE';

—————-또는——————

    select * from tab;

—————-또는——————

    select table_name from user_tables;


답변

아래의 데이터 사전보기를 시도하십시오.

tabs
dba_tables
all_tables
user_tables