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.exe
Windows) 세션에 연결하십시오. 데이터를 표시하는 다른 명령이나 쿼리를 실행하기 전에이 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
column
SQL * Plus에서 일반적으로 사용되는 사전 정의 된 정의 와 함께 약간 더 복잡한 쿼리가 표시 됩니다.
사실, 같은 데이터 사전, 생성 할 수있는 도구를 통해 해당 작업을 수행하는 queries.it이 가능 SQL을 통해 테이블의 목록을 가질 수 있습니다 어윈 , 두꺼비 데이터 모델러 또는 ERBuilder을 . 이러한 도구를 사용하면 테이블 이름 외에도 필드, 유형, 객체 (트리거, 시퀀스, 도메인, 뷰 등)가 있습니다.
테이블 정의를 생성하기 위해 따라야 할 단계는 다음과 같습니다.
데이터베이스는 소프트웨어에서 엔티티 관계 다이어그램으로 표시됩니다.
select * from all_all_tables
이 추가 '모두'는 처음에 다음과 같은 추가 3 열을 제공합니다.
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
작업 (MySQL의에서 수행으로)?