Como faço para consultar um banco de dados Oracle para exibir os nomes de todas as tabelas nele?
Como faço para consultar um banco de dados Oracle para exibir os nomes de todas as tabelas nele?
Respostas:
SELECT owner, table_name
FROM dba_tables
Isso pressupõe que você tenha acesso à DBA_TABLES
visualização do dicionário de dados. Se você não tiver esses privilégios, mas precisar deles, poderá solicitar que o DBA conceda explicitamente privilégios nessa tabela ou que o DBA conceda a você o SELECT ANY DICTIONARY
privilégio ou a SELECT_CATALOG_ROLE
função (um dos quais permitiria consultar qualquer tabela do dicionário de dados ) Obviamente, você pode excluir determinados esquemas como SYS
e SYSTEM
que possuem um grande número de tabelas Oracle com as quais você provavelmente não se importa.
Como alternativa, se você não tiver acesso DBA_TABLES
, poderá ver todas as tabelas às quais sua conta tem acesso através da ALL_TABLES
visualização:
SELECT owner, table_name
FROM all_tables
Embora isso possa ser um subconjunto das tabelas disponíveis no banco de dados (ALL_TABLES
mostra as informações de todas as tabelas às quais o usuário recebeu acesso).
Se você está preocupado apenas com as tabelas que você possui, não com as quais você tem acesso, você pode usar USER_TABLES
:
SELECT table_name
FROM user_tables
Como USER_TABLES
apenas possui informações sobre as tabelas que você possui, ela não possui uma OWNER
coluna - o proprietário, por definição, é você.
A Oracle também tem uma série de dados legados dicionário views-- TAB
, DICT
, TABS
, e CAT
para example-- que poderia ser usado. Em geral, eu não sugeriria o uso dessas visualizações herdadas, a menos que você precise absolutamente transportar seus scripts para o Oracle 6. O Oracle não alterou essas visualizações por um longo tempo; portanto, eles geralmente têm problemas com os tipos mais novos de objetos. Por exemplo, as visualizações TAB
e CAT
mostram informações sobre as tabelas que estão na lixeira do usuário, enquanto as [DBA|ALL|USER]_TABLES
visualizações filtram essas. CAT
também mostra informações sobre logs de exibição materializada com um TABLE_TYPE
de "TABLE", que é improvável que seja o que você realmente deseja. DICT
combina tabelas e sinônimos e não informa quem é o proprietário do objeto.
Consultando user_tables
e dba_tables
não funcionou.
Este fez:
select table_name from all_tables
Indo um passo adiante, há outra visualização chamada cols (all_tab_columns) que pode ser usada para verificar quais tabelas contêm um nome de coluna específico.
Por exemplo:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
para encontrar todas as tabelas com um nome começando com EST e colunas contendo CALLREF em qualquer lugar em seus nomes.
Isso pode ajudar ao determinar em quais colunas você deseja ingressar, por exemplo, dependendo das convenções de nomenclatura de tabelas e colunas.
select * from cols
e obtive 0 linhas retornadas.
sqlplus
Se você estiver usando, primeiro sqlplus
você pode configurar alguns parâmetros para uma visualização melhor, se suas colunas estiverem sendo mutiladas (essas variáveis não devem persistir depois que você sai da sqlplus
sessão):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Você pode usar algo assim para ver todos os nomes de tabela:
SELECT table_name, owner, tablespace_name FROM all_tables;
Como o @Justin Cave menciona, você pode usar isso para mostrar apenas as tabelas que você possui:
SELECT table_name FROM user_tables;
Lembre-se de que algumas "tabelas" podem realmente ser "visualizações", para que você também possa tentar executar algo como:
SELECT view_name FROM all_views;
Isso deve render algo que parece bastante aceitável como:
pagesize 30
com pagesize 1000
?
Consulta simples para selecionar as tabelas para o usuário atual:
SELECT table_name FROM user_tables;
Experimente as visualizações do dicionário de dados abaixo.
tabs
dba_tables
all_tables
user_tables
Tente selecionar entre user_tables, que lista as tabelas pertencentes ao usuário atual.
Banco de dados Oracle para exibir os nomes de todas as tabelas usando a consulta abaixo
SELECT proprietário, nome_tabela FROM dba_tables; SELECT proprietário, nome_tabela FROM todas_tabelas; SELECT table_name FROM user_tables;
visite mais: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
fornece todas as tabelas de todos os usuários apenas se o usuário com o qual você efetuou login tiver sysdba
privilégios.
Não encontrei resposta que apontaria para usar
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
então decidi adicionar minha versão também. Na verdade, essa exibição retorna mais que DBA_TABLES, pois também retorna tabelas de objetos ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
Você pode usar o Oracle Data Dictionary para obter informações sobre objetos oracle.
Você pode obter uma lista de tabelas de diferentes maneiras:
select *
from dba_tables
ou por exemplo:
select *
from dba_objects
where object_type = 'TABLE'
Em seguida, você pode obter colunas da tabela usando o nome da tabela:
select *
from dba_tab_columns
Então você pode obter uma lista de dependências (gatilhos, visualizações e etc.):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Então você pode obter a fonte de texto desses objetos:
select * from dba_source
E você pode usar USER
ou ALL
exibir em vez de, DBA
se quiser.
Podemos obter todas as tabelas, incluindo detalhes da coluna, abaixo da consulta:
SELECT * FROM user_tab_columns;
Abaixo está um trecho comentado de consultas SQL que descreve como as opções que você pode usar:
-- 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;
Um novo recurso disponível no SQLcl (que é uma interface de linha de comando gratuita para o Oracle Database) é
Tables
alias.
Aqui estão alguns exemplos mostrando o uso e aspectos adicionais do recurso. Primeiro, conecte-se a uma sessão de sql
linha de comando ( sql.exe
no Windows). É recomendável inserir este comando específico do sqlcl antes de executar outros comandos ou consultas que exibam dados.
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
..
Para saber a que o tables
alias está se referindo, você pode simplesmente usaralias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Você não precisa definir esse alias, pois vem por padrão em SQLcl. Se você deseja listar tabelas de um esquema específico, usando um novo alias definido pelo usuário e passando o nome do esquema como um argumento de ligação, com apenas um conjunto de colunas sendo exibidas, faça isso usando
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Depois disso, você pode simplesmente passar o nome do esquema como argumento
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
..
..
Um alias predefinido mais sofisticado é conhecido como Tables2
, que exibe várias outras colunas.
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
Para saber qual consulta é executada em segundo plano, insira
alias list tables2
Isso mostrará uma consulta um pouco mais complexa, juntamente com predefinições column
definições comumente usadas no SQL * Plus.
Jeff Smith explica mais sobre aliases aqui
Eu estava procurando obter uma lista de todos os nomes de colunas pertencentes a uma tabela de um esquema, classificados pela ordem do ID da coluna.
Aqui está a consulta que estou usando: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
De fato, é possível ter a lista de tabelas via consultas SQL. É possível fazer isso também através de ferramentas que permitem a geração de dicionários de dados, como ERWIN , Toad Data Modeler ou ERBuilder . Com essas ferramentas, além dos nomes das tabelas, você terá campos, seus tipos, objetos como (gatilhos, sequências, domínio, visualizações ...)
Abaixo as etapas a seguir para gerar sua definição de tabelas:
Seu banco de dados será exibido no software como um diagrama de Entity Relationship.
select * from all_all_tables
este 'all' adicional no início fornece 3 colunas extras, que são:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(como feito no MySQL) trabalho?