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


1102

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


1
합니까 SHOW TABLES작업 (MySQL의에서 수행으로)?
Martin Thoma

1
@MartinThoma nope. 구글에 의지하기 전에 먼저 그것을 시도
Adam Burley

답변:


1364
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테이블과 동의어를 결합하고 누가 객체를 소유하고 있는지 말하지 않습니다.


9
"테이블 또는 뷰가 존재하지 않습니다 ORA-00942는"나는 예외 받고 있어요
vitule

46
그런 다음 데이터베이스의 모든 테이블을 볼 수있는 권한이 없습니다. ALL_TABLES 데이터 사전보기를 쿼리하여 액세스 할 수있는 모든 테이블 (데이터베이스에있는 테이블의 작은 서브 세트 일 수 있음)을 볼 수 있습니다.
Justin Cave

일상적인 sqlplus 사용자가 아닌 경우 간단한 실수 : 위의 명령으로 결과를 얻지 못하면 끝 세미 콜론 ( ';')을 추가하십시오 :).
Gimhani

Oracle 12c부터 dba_users 데이터 딕셔너리에 결과 세트에서 시스템 테이블을 제거하는 데 도움이되는 열이 있습니다. 전체 쿼리는 SELECT 소유자, dba_tables의 table_name, 소유자가없는 위치 (oracle_maintained = 'Y'인 dba_users에서 사용자 이름 선택)
saritonin

181

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

select table_name from all_tables  

14
@LimitedAtonement 죄송합니다. 그건 틀 렸습니다. 뷰는 user_table이 아니라 user_tables라고합니다. user_tables가 vitule에서 작동하지 않으면 다른 것이 잘못되었습니다.
Frank Schmitt

67

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

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

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

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

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


4
나는 select * from cols행을 0으로 돌려 받았다.
Gabe

50

보다 나은 시청을 위해 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;

결과

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

결과


8
은 "더보기"조언을 주셔서 감사합니다,하지만 당신은 overwritting되지 pagesize 30pagesize 1000?
Pablo Recalde

22

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

  SELECT table_name FROM user_tables;

18
    select object_name from user_objects where object_type='TABLE';

----------------또는------------------

    select * from tab;

----------------또는------------------

    select table_name from user_tables;




8

이들 중 하나를 사용하여 다음을 선택할 수 있습니다.

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

6
select * from dba_tables

로그인 한 사용자에게 sysdba권한 이있는 경우에만 모든 사용자의 모든 테이블을 제공합니다 .


4
실제로 정확하지 않습니다. SYSDBA는 필요하지 않습니다. 여러 가지 방법으로 DBA_TABLES에 액세스 할 수 있습니다. 1.) SYS에 의해 사용자에게 개체에 대한 직접 부여. 2.) 사용자에게 SELECT ANY DICTIONARY 권한 부여. 3.) SELECT_CATALOG_ROLE 역할 부여.
Mark J. Bobak


4

Oracle Data Dictionary 를 사용하여 Oracle 오브젝트에 대한 정보를 얻을 수 있습니다.

다른 방법으로 테이블 목록을 얻을 수 있습니다.

select * 
from dba_tables

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

select * 
from dba_objects 
where object_type = 'TABLE' 

그런 다음 테이블 이름을 사용하여 테이블 열을 얻을 수 있습니다.

select * 
from dba_tab_columns

그런 다음 종속성 목록 (트리거, 뷰 등)을 얻을 수 있습니다.

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

그런 다음이 객체의 텍스트 소스를 얻을 수 있습니다.

select * from dba_source

원하는 경우 대신 USER또는 ALL보기를 사용할 수 있습니다 DBA.


4

조회수 포함 :

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS

4

아래 쿼리에서 열 세부 정보를 포함한 모든 테이블을 가져올 수 있습니다.

SELECT * FROM user_tab_columns;

4

다음은 옵션을 사용하는 방법을 설명하는 주석이 달린 SQL 쿼리 스 니펫입니다.

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;

2

다음 쿼리는 필요한 데이터 만 나열하고 다른 답변은 나에게 혼란 스러웠던 추가 데이터를 제공했습니다.

select table_name from user_tables;

2

SQLcl (Oracle Database의 무료 명령 줄 인터페이스) 에서 사용할 수있는 새로운 기능 은 다음과 같습니다.

Tables 별명.

다음은 기능의 사용법 및 추가 측면을 보여주는 몇 가지 예입니다. 먼저, sql명령 행 ( sql.exeWindows) 세션에 연결하십시오. 데이터를 표시하는 다른 명령이나 쿼리를 실행하기 전에이 sqlcl 특정 명령을 입력하는 것이 좋습니다.

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

tables별칭이 무엇을 의미하는지 알기 위해 간단히alias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

이 별명은 기본적으로 SQLcl에서 제공되므로 정의하지 않아도됩니다. 새로운 사용자 정의 별명을 사용하고 스키마 이름을 열 세트 만 표시하는 바인드 인수로 전달하여 특정 스키마의 테이블을 나열하려면 다음을 사용하십시오.

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

그런 다음 스키마 이름을 인수로 간단히 전달할 수 있습니다.

SQL> tables_schema HR

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

보다 정교한 사전 정의 된 별칭은로 알려져 있으며 Tables2다른 열을 표시합니다.

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

백그라운드에서 실행되는 쿼리를 확인하려면 다음을 입력하십시오.

alias list tables2

columnSQL * Plus에서 일반적으로 사용되는 사전 정의 된 정의 와 함께 약간 더 복잡한 쿼리가 표시 됩니다.

Jeff Smith여기에서 별칭에 대해 더 자세히 설명합니다 .


1

열 ID의 순서로 정렬 된 스키마 테이블에 속하는 모든 열 이름 목록을 얻으려고했습니다.

사용중인 쿼리는 다음과 같습니다.-

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;

1

사실, 같은 데이터 사전, 생성 할 수있는 도구를 통해 해당 작업을 수행하는 queries.it이 가능 SQL을 통해 테이블의 목록을 가질 수 있습니다 어윈 , 두꺼비 데이터 모델러 또는 ERBuilder을 . 이러한 도구를 사용하면 테이블 이름 외에도 필드, 유형, 객체 (트리거, 시퀀스, 도메인, 뷰 등)가 있습니다.

테이블 정의를 생성하기 위해 따라야 할 단계는 다음과 같습니다.

  1. 데이터베이스를 리버스 엔지니어링해야합니다
    • Toad 데이터 모델러에서 : 메뉴-> 파일-> 리버스 엔지니어링-> 리버스 엔지니어링 마법사
    • ERBuilder 데이터 모델러에서 : 메뉴-> 파일-> 리버스 엔지니어

데이터베이스는 소프트웨어에서 엔티티 관계 다이어그램으로 표시됩니다.

  1. 테이블 정의를 포함 할 데이터 사전을 생성하십시오.
    • Toad 데이터 모델러에서 : 메뉴-> 모델-> 보고서 생성-> 실행
    • ERBuilder 데이터 모델러에서 : 메뉴-> 도구-> 모델 문서 생성

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.