Translate

Tipos de dados PL/SQL

Tipos de dados Oracle

Tipos de dados Oracle

Prof. Paulo Kaupa

 

Para garantir a melhor arquitetura para um projeto de Banco de Dados (BD) é importante definir os tipos de dados e o tamanho de cada campo (coluna da tabela) antes da criação efetiva das tabelas no BD. Conhecendo os tipos de dados pode-se criar as tabelas de forma correta e otimizada, escolhendo o tipo mais adequado para cada campo de acordo com o dado que será armazenado.

Os tipos de dados determinam as características dos dados que poderão ser armazenados nos campos das tabelas criadas no BD e nas variáveis presentes em processos (Procedures, funções, blocos de código...) do BD.

A correta escolha pode impactar na performance do BD, dos processos e aplicativos que acessam este BD, bem como na capacidade de armazenamento uma vez que determinados tipos armazenam informações com as mesmas caracteristicas porém usam mais ou menos memória.

Os tipos de dados podem ser agrupados em três conjuntos:

  • Tipos de Texto (Strings)
  • Tipos Numéricos (Inteiros ou decimais)
  • Tipos de Datas (Temporais)

A seguir apresentam-se os tipos mais comuns no Oracle e tambem suportados por outros bancos de dados. Sugere-se consultar a documentação oficial para cada banco e versão usada, uma vez que a tipagem de dados pode sofrer alterações ao longo do tempo e também podem ser criados novos tipos de dados.

Para armazenamento de textos (Strings):

  • VARCHAR2 – Sequencia de caracteres alfanuméricos de tamanho variável com limite de 4000 Bytes.
  • VARCHAR – Sinônimo para VARCHAR2, por recomendação da própria Oracle, este tipo de dados não deve ser usado, pois existe a possibilidade do tipo VARCHAR integrar versões futuras do banco de dados Oracle com características diferentes do VARCHAR2. O compimento para este tipo de dados é variavel, assim somente o espaço que realmente for preenchido será armazenado na memória. Veja Exemplo 01 deste artigo. O VAR significa Variable.
  • CHAR – Armazena caracteres alfanuméricos de tamanho 1 até 255. Esse tipo de dados é de comprimento fixo, ou seja, se o valor preenchido for menor que o valor declarado, o campo será preenchido com espaços em branco a direita. Quando o dado é requisitado estes espaços são removidos automaticamente, a não ser que  Sua melhor utilização é quandop sabe-se que o conteúdo tem um tamanho fixo, exemplo uma Flag que irá gravar “Sim” ou  Não, em todas as situação sempre serão preenchidos 3 caracteres, ou então a sigla de um Estado que sempre será composta por dois caracteres. Veja Exemplo 1 deste artigo.

A diferença entre os tipos VARCHAR2/VARCHAR e CHAR está na capacidade total de armazenamento, onde pode-se armazenar mais caracteres quando o tipo de dados VARCHAR2 e no aproveitamento de memória, o tamanho de um campo VARCHAR2 varia de acordo com seu conteúdo, o valor declarado é apenas um limitador, já quando usa-se o tipo CHAR o valor declarado é fixo independente do seu conteúdo.

Exemplo 1:

Para uma coluna hipotética chamada NOME do tipo VARCHAR2 com tamanho (máximo) 20 caracteres, ao armazenarmos o nome Paulo, serão usadas apenas 5 posições.

Caso o tipo de dados para esta mesma coluna for definido com CHAR tamanho 20, ao armazenarmos o nome Paulo, serão usadas 20 posições de memória, sendo 5 para a palavra Paulo e o restante será preenchido com espaços em branco.

Pode-se concluir que o uso do tipo VARCHAR2 é mais adequado quando o valor a ser armazenado tem seu tamanho variável.

 

Tipos de dados Numéricos:

  • NUMBER [(precisão),(escala)] - Representa um número que podem variar entre 1 e 38 posições e a escala entre –84 e 127 posições. Para valores inteiros a escala deve ser 0. A “Precisão” corresponde ao tamanho do número que se deseja armazenar, já a escala representa o tamanho da parte decimal (Quantidade de casas decimais). Exemplo: Se o Valor que se deseja armazenar possuir quatro casas decimais e duas casas inteiras (22,1245) a declaração do tipo será 6 para a primeira posição, pois representa o total de numeros e a segunda será 4: NUMBER(6,4) indica que o tamanho total é 6 sendo que 4 são decimais.
  • Para trabalhar com o tipo de dados NUMBER armazenando apenas números inteiros declara-se NUMBER(38). Exemplo de uma tabela que contem dois campos do tipo NUMBER, sendo que o primeiro está declarado para armazenar dados com casas decimais e no segundo apenas dados inteiros.
  • INTEGER – Tipo de dados para números inteiros. Equivalente ao NUMBER, com escala zero.

Nota: Qual tipo usar para armazenar dados Inteiros: Number ou Integer?
Quando declara-se um campo com o tipo Integer ou Number ambos são armazenados no dicionário como tipo numérico. Isso pode ser verificado no exercício proposto(Exercicio 01).

  • SMALLINT – Equivalente ao NUMBER, porém ocupa a metade do espaço em memória.

 

Tipo de dados para Datas:

  • DATE - Permite armazenar datas que vão de 1 de Janeiro de 4712 AC à 31 de Dezembro de 9999 DC. Os valores armazenados incluem século, ano, mês, dia, hora, minuto e segundo.
  • TIMESTAMP – Similar ao tipo DATE, mas com uma maior precisão para segundos

 

Outros tipos:

BLOB, CLOB, NCLOB, BFILE, NVARCHAR2, MLSLABEL e NCHAR são tambem tipos de dados possíveis mas menos usados. Consulte a documentação do Oracle.

 

Referências:

MANZANO, J., A., N., G.. Oracle Database 10g Express Edition Interativo, Guia Básico de Orientação e Desenvolvimento. Editora Érica, São Paulo 1ª Edição,  2007.

OLIVEIRA, C., H., P.. SQL Curso Prático. Editora Novatec Ltda, 2002.

SITE ORACLE - http://www.oracle.com/technetwork/pt/articles/sql/introducao-tipo-de-dado-timestamp-1505073-ptb.html

http://docs.oracle.com/javadb/10.6.1.0/ref/rrefsqlj27281.html

http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/03_types.htm

FREEMAN, R. . Oracle, referências para o DBA: Técnicas essenciais para o Dia-aDia do DBA, Elsevier, 2005.

http://docs.oracle.com/cd/E17952_01/refman-5.6-en/char.html

Sobre o Autor:

Mestre em Engenharia de Produção pela Universidade Nove de Julho. Bacharel em Ciência da Computação também pela Universidade Nove de Julho. Atualmente é Professor de ensino superior (Universidade Nove de Julho), Analista de Sistemas na Empresa Atento e Pesquisador na área de Inteligência Computacional aplicada em investimentos na Bolsa de Valores de São Paulo. Possui experiência em Análise e desenvolvimento de sistemas, aplicações de Inteligência Computacional no Mercado de Ações, Análise Técnica para seleção de ações para investimentos na Bolsa de Valores. Curriculo Lattes: http://lattes.cnpq.br/0074185478343196