sql 리스트 - 오라클의 모든 테이블 목록 가져 오기?




개수 티베로 (17)

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


Answers

다음은 옵션을 사용하는 방법을 설명하는 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;

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

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


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 * from dba_tables

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


보기 포함 :

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



이것을 위해 3 개의 datadictinary가 있습니다.

DBA_TABLES는 데이터베이스의 모든 관계형 테이블을 설명합니다.

SELECT owner, table_name
  FROM dba_tables

사용자가 액세스 할 수있는 관계형 테이블에 대한 설명

SELECT owner, table_name
  FROM all_tables

USER_TABLES 는 현재 사용자가 소유 한 관계형 테이블을 설명합니다. 이보기에는 OWNER 열이 표시되지 않습니다.

SELECT table_name
  FROM user_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 object_name from user_objects where object_type='TABLE';

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

    select * from tab;

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

    select table_name from user_tables;

SELECT owner, table_name
  FROM dba_tables

이것은 DBA_TABLES 데이터 딕셔너리 뷰에 대한 액세스 권한이 있다고 가정합니다. 이러한 권한이 없지만 필요하면 DBA가 해당 테이블에 대한 권한을 명시 적으로 부여하거나 DBA가 SELECT ANY DICTIONARY 권한 또는 SELECT_CATALOG_ROLE 역할을 부여하도록 요청할 수 있습니다 (둘 중 하나를 선택하면 쿼리 할 수 ​​있음). 모든 데이터 딕셔너리 테이블). 물론, SYSSYSTEM 같은 특정 스키마를 제외하고 싶을 수도 있습니다. SYSSYSTEM 은 걱정하지 않는 많은 수의 Oracle 테이블을 가지고 있습니다.

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

SELECT owner, table_name
  FROM all_tables

그것은 데이터베이스에서 사용 가능한 테이블의 서브 세트 일 수 있지만 ( ALL_TABLES 는 사용자에게 액세스가 부여 된 모든 테이블에 대한 정보를 표시합니다).

자신이 소유하고있는 테이블이 아닌 테이블에 관심이 있다면 USER_TABLES 사용할 수 있습니다 :

SELECT table_name
  FROM user_tables

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

오라클은 또한 TAB , DICT , TABS , CAT 여러 가지 레거시 데이터 사전보기를 사용할 수 있습니다. 일반적으로 오라클 6으로 스크립트를 백 포트해야하는 경우가 아니면 이러한 레거시 뷰를 사용하지 않는 것이 좋습니다. 오라클은 오랫동안 이러한 뷰를 변경하지 않았으므로 새로운 유형의 객체에 자주 문제가 발생합니다. 예를 들어 TAB 뷰와 CAT 뷰는 모두 [DBA|ALL|USER]_TABLES 뷰가 뷰를 필터링하는 동안 사용자의 휴지통에있는 테이블에 대한 정보를 표시합니다. CAT 는 또한 실제 테이블 로그에 대한 정보를 보여줍니다. TABLE_TYPE 이 "TABLE"인데, 이것은 당신이 정말로 원하는 것 같지 않습니다. DICT 는 표와 동의어를 결합하고 객체 DICT 알려주지 않습니다.


user_tablesdba_tables 쿼리하지 못했습니다.
이 한 :

select table_name from all_tables  

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

SELECT * FROM user_tab_columns;

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

다음은 내가 사용하고있는 쿼리입니다.

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

그 중 하나를 선택하면 다음을 선택할 수 있습니다.

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';

아래의 데이터 사전보기를 사용해보십시오.

tabs
dba_tables
all_tables
user_tables

인덱스 작성은 추가 쓰기 및 저장 공간을 필요로하기 때문에 응용 프로그램에 삽입 / 업데이트 작업이 더 많이 필요할 경우 색인없이 테이블을 사용하는 것이 좋지만 더 많은 데이터 검색 작업이 필요하면 색인 된 표.





sql oracle