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은 이러한보기를 오랫동안 변경하지 않았기 때문에 종종 새로운 유형의 객체에 문제가 있습니다. 예를 들어 TAB및 CAT보기는 모두 사용자 휴지통에있는 테이블에 대한 정보를 표시하지만보기는 모두 테이블을 [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를 포함하는 열을 찾습니다.
예를 들어 테이블 및 열 이름 지정 규칙에 따라 조인하려는 열을 작업 할 때 도움이됩니다.
select * from cols행을 0으로 돌려 받았다.
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;
이렇게하면 다음과 같이 상당히 수용 가능한 것으로 보입니다.

pagesize 30로 pagesize 1000?
아래의 데이터 사전보기를 시도하십시오.
tabs
dba_tables
all_tables
user_tables
현재 사용자가 소유 한 테이블을 나열하는 user_tables 에서 선택하십시오 .
아래 쿼리를 사용하여 모든 테이블의 이름을 표시하는 Oracle 데이터베이스
dba_tables에서 소유자, table_name을 선택하십시오. SELECT_ 소유자, table_name FROM all_tables; user_tables에서 table_name을 선택하십시오.
추가 정보 : http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
로그인 한 사용자에게 sysdba권한 이있는 경우에만 모든 사용자의 모든 테이블을 제공합니다 .
사용할만한 답변을 찾지 못했습니다
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
그래서 내 버전도 추가하기로 결정했습니다. 이 뷰는 실제로 오브젝트 테이블을 리턴 할 때 (DBA_TABLES 이상을 리턴합니다 ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
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.
아래 쿼리에서 열 세부 정보를 포함한 모든 테이블을 가져올 수 있습니다.
SELECT * FROM user_tab_columns;
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에서 일반적으로 사용되는 사전 정의 된 정의 와 함께 약간 더 복잡한 쿼리가 표시 됩니다.
사실, 같은 데이터 사전, 생성 할 수있는 도구를 통해 해당 작업을 수행하는 queries.it이 가능 SQL을 통해 테이블의 목록을 가질 수 있습니다 어윈 , 두꺼비 데이터 모델러 또는 ERBuilder을 . 이러한 도구를 사용하면 테이블 이름 외에도 필드, 유형, 객체 (트리거, 시퀀스, 도메인, 뷰 등)가 있습니다.
테이블 정의를 생성하기 위해 따라야 할 단계는 다음과 같습니다.
데이터베이스는 소프트웨어에서 엔티티 관계 다이어그램으로 표시됩니다.
select * from all_all_tables
이 추가 '모두'는 처음에 다음과 같은 추가 3 열을 제공합니다.
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES작업 (MySQL의에서 수행으로)?