Detalhando uma tabela no Oracle
Overview
Navegar pelas diferenças entre bancos de dados pode ser um desafio, especialmente para quem está migrando de SQL Server para Oracle. Este post é um guia rápido e descomplicado para entender como acessar informações de tabelas no Oracle, com dicas úteis inclusive para quem usa outros SGBDs. Vamos desbravar juntos esses comandos!
Para quem está acostumado a utilizar o SQL Server, a procedure sp_help está sempre disponível para recuperarmos os detalhes de alguma tabela. No Oracle a coisa muda um pouco de figura. Abaixo estão algumas opções para conseguir esta informação.
A primeira (e talvez a mais utilizada) forma de se conseguir estas informações é usando o comando abaixo:
desc nome_da_tabela;
--ou
describe nome_da_tabela;
O problema deste comando é que ele não é um statement SQL em si, ou seja, não irá funcionar em todos os lugares. Aliás, provavel que só funcione no SQL*Plus ou SQL Developer. O DBeaver Community, por exemplo (até a versão 4.1.2) não suporta estes comandos.
Para resolver este problema, você pode utilizar o comando abaixo:
select * from all_tab_columns where table_name = 'nome_da_tabela' order by column_id;
Esta consulta retornará as colunas abaixo. Os nomes são bem intuitivos, então não vou explicá-los (a menos que apareçam dúvidas).
- OWNER
- TABLE_NAME
- COLUMN_NAME
- DATA_TYPE
- DATA_TYPE_MOD
- DATA_TYPE_OWNER
- DATA_LENGTH
- DATA_PRECISION
- DATA_SCALE
- NULLABLE
- COLUMN_ID
- DEFAULT_LENGTH
- DATA_DEFAULT
- NUM_DISTINCT
- LOW_VALUE
- HIGH_VALUE
- DENSITY
- NUM_NULLS
- NUM_BUCKETS
- LAST_ANALYZED
- SAMPLE_SIZE
- CHARACTER_SET_NAME
- CHAR_COL_DECL_LENGTH
- GLOBAL_STATS
- USER_STATS
- AVG_COL_LEN
- CHAR_LENGTH
- CHAR_USED
- V80_FMT_IMAGE
- DATA_UPGRADED
- HISTOGRAM
Extra!
Para conseguir este resultado em outros SGBDs, utilize os comandos abaixo:
sqlite3: .schema nome_da_tabela
Postgres: \d nome_da_tabela
MySQL: describe nome_da_tabela
Espero ter ajudado.