@MartinThoma nope. tentei isso primeiro, antes de recorrer ao Google #
Adam Burley
Respostas:
1364
SELECT owner, table_name
FROM dba_tables
Isso pressupõe que você tenha acesso à DBA_TABLESvisualizaçã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 DICTIONARYprivilégio ou a SELECT_CATALOG_ROLEfunção (um dos quais permitiria consultar qualquer tabela do dicionário de dados ) Obviamente, você pode excluir determinados esquemas como SYSe SYSTEMque 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_TABLESvisualizaçã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_TABLESapenas possui informações sobre as tabelas que você possui, ela não possui uma OWNERcoluna - 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 CATpara 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 TABe CATmostram informações sobre as tabelas que estão na lixeira do usuário, enquanto as [DBA|ALL|USER]_TABLESvisualizações filtram essas. CATtambém mostra informações sobre logs de exibição materializada com um TABLE_TYPEde "TABLE", que é improvável que seja o que você realmente deseja. DICTcombina tabelas e sinônimos e não informa quem é o proprietário do objeto.
Estou recebendo uma exceção "ORA-00942: tabela ou exibição não existe"
vitule 15/10/2008
46
Então você não recebeu permissão para ver todas as tabelas no banco de dados. Você pode consultar a visualização do dicionário de dados ALL_TABLES para ver todas as tabelas que você tem permissão para acessar, que pode ser um pequeno subconjunto das tabelas no banco de dados.
Justin Cave
Erro simples, se não um usuário comum do sqlplus: adicione o ponto-e-vírgula final (';') se você simplesmente não obtiver resultados com os comandos acima :).
Gimhani
Apenas observe que, no Oracle 12c, há uma coluna no dicionário de dados dba_users para ajudar a remover as tabelas de sistema do seu conjunto de resultados. A consulta completa seria SELECT owner, nome_da_tabela de dba_tables em que o proprietário não está (selecione o nome de usuário de dba_users em que oracle_maintained = 'Y')
saritonin
181
Consultando user_tablese dba_tablesnão funcionou.
Este fez:
@LimitedAtonement Desculpe, isso está errado. A visualização é chamada de user_tables, não user_table. Se user_tables não funcionasse para o vitule, outra coisa estava errada.
26513 Frank Schmitt
67
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.
Eu fiz select * from colse obtive 0 linhas retornadas.
Gabe
50
Para uma melhor visualização com sqlplus
Se você estiver usando, primeiro sqlplusvocê 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 sqlplussessão):
set colsep '|'set linesize 167set pagesize 30set pagesize 1000
Mostrar todas as tabelas
Você pode usar algo assim para ver todos os nomes de tabela:
SELECT table_name, owner, tablespace_name FROM all_tables;
Mostrar tabelas que você possui
Como o @Justin Cave menciona, você pode usar isso para mostrar apenas as tabelas que você possui:
SELECT table_name FROM user_tables;
Não se esqueça das visualizações
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;
Os resultados
Isso deve render algo que parece bastante aceitável como:
SELECTDISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';SELECTDISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';
Na verdade, isso não está correto. SYSDBA não é necessário. Você pode acessar DBA_TABLES de várias maneiras. 1.) Concessão direta no objeto ao usuário pelo SYS. 2.) Concessão do privilégio SELECT QUALQUER DICIONÁRIO ao usuário. 3.) Concessão da função SELECT_CATALOG_ROLE.
Abaixo está um trecho comentado de consultas SQL que descreve como as opções que você pode usar:
-- need to have select catalog roleSELECT*FROM dba_tables;-- to see tables of your schemaSELECT*FROM user_tables;-- tables inside your schema and tables of other schema which you possess select grants onSELECT*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 sqllinha de comando ( sql.exeno 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 tablesalias está se referindo, você pode simplesmente usaralias list <alias>
SQL> alias list tables
tables - tables <schema>- show tables fromschema--------------------------------------------------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
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:
Você precisa fazer engenharia reversa no seu banco de dados
No modelador de dados Toad: Menu -> Arquivo -> engenharia reversa -> assistente de engenharia reversa
No modelador de dados ERBuilder: Menu -> Arquivo -> engenharia reversa
Seu banco de dados será exibido no software como um diagrama de Entity Relationship.
Gere seu dicionário de dados que conterá sua definição de tabelas
No modelador de dados do Toad: Menu -> Modelo -> Gerar relatório -> Executar
No modelador de dados ERBuilder: Menu -> Ferramenta -> gerar documentação do modelo
SHOW TABLES
(como feito no MySQL) trabalho?Respostas:
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ê oSELECT ANY DICTIONARY
privilégio ou aSELECT_CATALOG_ROLE
função (um dos quais permitiria consultar qualquer tabela do dicionário de dados ) Obviamente, você pode excluir determinados esquemas comoSYS
eSYSTEM
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 daALL_TABLES
visualização: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
:Como
USER_TABLES
apenas possui informações sobre as tabelas que você possui, ela não possui umaOWNER
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
, eCAT
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çõesTAB
eCAT
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 umTABLE_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.fonte
Consultando
user_tables
edba_tables
não funcionou.Este fez:
fonte
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:
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.
fonte
select * from cols
e obtive 0 linhas retornadas.Para uma melhor visualização com
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 dasqlplus
sessão):Mostrar todas as tabelas
Você pode usar algo assim para ver todos os nomes de tabela:
Mostrar tabelas que você possui
Como o @Justin Cave menciona, você pode usar isso para mostrar apenas as tabelas que você possui:
Não se esqueça das visualizações
Lembre-se de que algumas "tabelas" podem realmente ser "visualizações", para que você também possa tentar executar algo como:
Os resultados
Isso deve render algo que parece bastante aceitável como:
fonte
pagesize 30
compagesize 1000
?Consulta simples para selecionar as tabelas para o usuário atual:
fonte
----------------OU------------------
----------------OU------------------
fonte
Experimente as visualizações do dicionário de dados abaixo.
fonte
Tente selecionar entre user_tables, que lista as tabelas pertencentes ao usuário atual.
fonte
Banco de dados Oracle para exibir os nomes de todas as tabelas usando a consulta abaixo
visite mais: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
fonte
Com qualquer um desses, você pode selecionar:
fonte
fornece todas as tabelas de todos os usuários apenas se o usuário com o qual você efetuou login tiver
sysdba
privilégios.fonte
Não encontrei resposta que apontaria para usar
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 ).
fonte
Você pode usar o Oracle Data Dictionary para obter informações sobre objetos oracle.
Você pode obter uma lista de tabelas de diferentes maneiras:
ou por exemplo:
Em seguida, você pode obter colunas da tabela usando o nome da tabela:
Então você pode obter uma lista de dependências (gatilhos, visualizações e etc.):
Então você pode obter a fonte de texto desses objetos:
E você pode usar
USER
ouALL
exibir em vez de,DBA
se quiser.fonte
Incluindo visualizações:
fonte
Podemos obter todas as tabelas, incluindo detalhes da coluna, abaixo da consulta:
fonte
Abaixo está um trecho comentado de consultas SQL que descreve como as opções que você pode usar:
fonte
A consulta a seguir lista apenas os dados necessários, enquanto as outras respostas me deram os dados extras que apenas me confundiram.
fonte
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> tables
Para saber a que o
tables
alias está se referindo, você pode simplesmente usaralias list <alias>
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
Um alias predefinido mais sofisticado é conhecido como
Tables2
, que exibe várias outras colunas.Para saber qual consulta é executada em segundo plano, insira
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
fonte
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: -
fonte
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.
fonte
este 'all' adicional no início fornece 3 colunas extras, que são:
fonte