Mostrando postagens com marcador Data Types. Mostrar todas as postagens
Mostrando postagens com marcador Data Types. Mostrar todas as postagens

7 de abr. de 2021

Tipos de Dados - Demais tipos

    Além dos tipos de dados que já vimos, onde podemos manipular e armazenar, caracteres, dígitos e datas, temos outros tipos de dados que veremos abaixo.

LONG

    Atualmente não é mais recomendável utilizar colunas do tipo LONG, pois estão defasadas, devendo ser utilizadas BLOB, CLOB ou NCLOB, sendo recomendando também a conversão de colunas LONG para LOB. Contudo, o banco de dados ainda suporta esse tipo de dados por questões de retro compatibilidade.

O tipo de dados LONG é um tipo que permite armazenar sequências de caracteres de até 2Gb. Esse tipo de dados possui várias peculiaridades entre elas:

  • Somente uma coluna long por tabela;
  • Colunas long não podem ser utilizadas em índices;
  • Não podem ser utilizadas em expressões regulares;
  • Não podem ser utilizadas na cláusula WHERE ou em constraints de integridade.
  • Não podem ser utilizadas em GROUP BY, ORDER BY, CONNECT BY ou no select com função DISTINCT.

RAW e LONG RAW

    Os tipos RAW e LONG RAW são utilizados para armazenar dados que não são convertidos explicitamente pelo banco de dados Oracle quando move os dados entre diferentes sistemas. Podem ser utilizados para armazenamento de áudios, gráficos, imagens ou documentos. Assim como ocorre com o tipo LONG, é recomendável utilizar os tipos de dados LOB ao invés do LONG RAW. Tipos RAW funcionam como VARCHAR2, pois tem tamanho variável. Os tipos RAW podem ser implicitamente convertidos em CHAR, VARCHAR2 ou LONG e também podem ser explicitamente convertidos em hexadecimal utilizando a função RAWTOHEX e HEXTORAW. 

ROWID

    Todas as linhas no armazenadas no banco de dados Oracle tem um endereço específico que é utilizada para a organização dos dados dentro do banco, esses endereços de cada linha são chamados de rowids. Para saber qual o endereço de um linha basta incluir a pseudocoluna ROWID na área de select da consulta. A pseudocoluna ROWID também pode ser utilizada no campo WHERE.





    Os valores de rowid são formados na base de 64, podem conter caracteres de a-z ou A-Z, dígitos de 0-9 e os sinais + (mais) e / (barra). O tamanho do conteúdo de rowid vai depender também do sistema operacional utilizado no banco de dados.

UROWID

    Urowid significa universal rowid e são utilizados quando os rowids não estão armazenados dentro do banco de dados Oracle, podendo ser tabelas externas do banco ou mesmo de outros bancos de dados acessados pelo Oracle por meio de Gateways.

Tipos LOB

    O tipo de dados LOB significa Large Objects, ou seja objetos grandes. Podemos classificar o dados LOB em internos e externos de acordo com a maneira que é armazenado no banco de dados, os  LOBs internos são armazenados dentro do banco de dados e podem ser do tipo CLOB, NCLOB ou BLOB, enquanto o LOB externo é armazenado fora do banco de dados e é chamado de BFILE. Esses tipos de dados servem para armazenar informações grandes ou fora de padrões, como áudios e imagens. Os tipos LOB podem armazenar até 4000 bytes na forma de coluna, no caso de ter mais de 4000bytes serão sempre armazenados externamente. Colunas LOBs possuem localizadores que referenciam se os valores estão armazenados internamente ou externamente, quando fazendo um select em uma coluna LOB, o banco de dados retorna os localizadores dos registros dessa coluna.

CLOB

    O tipo de dados CLOB armazena dados em formato caractere tanto de byte único como multibyte, são suportados caracteres de tamanho fixo ou variável. Objetos CLOB tem suporte completo para transações, podendo ter commits ou rollbacks em seus dados. As colunas do tipo CLOB podem armazenar até (4Gb-1) * (valor do parâmetro CHUNK), caso o valor para o parâmetro CHUNK padrão tenha sido utilizado na definição da coluna nesse caso o valor que poderá ser armazenado será definido por (4Gb -1) * (tamanho do bloco do banco de dados).

NCLOB

    O tipo de dados NCLOB armazena dados em formato Unicode, são suportados caracteres de tamanho fixo ou variável com ambos utilizando o conjunto de caracters nacional. Objetos NCLOB tem suporte completo para transações, podendo ter commits ou rollbacks em seus dados. As colunas do tipo NCLOB podem armazenar até (4Gb-1) * (valor do parâmetro CHUNK), caso o valor para o parâmetro CHUNK padrão tenha sido utilizado na definição da coluna nesse caso o valor que poderá ser armazenado será definido por (4Gb -1) * (tamanho do bloco do banco de dados).

BLOB

    BLOB significa Binary Large OBjects e armazena dados binários grandes e não estruturados, objetos BLOB tem suporte completo para transações, podendo ter commits ou rollbacks em seus dados. As colunas do tipo BLOB podem armazenar até (4Gb-1) * (valor do parâmetro CHUNK), caso o valor para o parâmetro CHUNK padrão tenha sido utilizado na definição da coluna nesse caso o valor que poderá ser armazenado será definido por (4Gb -1) * (tamanho do bloco do banco de dados).

BFILE

    O tipo BFILE serve para acessar arquivos binários que estão armazenados fora do banco de dados. É possível realizar a troca do caminho onde o arquivo está armazenado ou mesmo o nome do arquivo sem afetar os dados do mesmo utilizando a função BFILENAME. Os dados dentro de um BFILE são apenas para leitura, não sendo possível realizar alterações e é tarefa do DBA garantir que os processos do banco de dados Oracle possuam permissão de leitura nos arquivos BFILE. Um arquivo BFILE poderá ter no máximo 264-1 bytes, contudo esse valor poderá ser menor de acordo com o sistema operacional.

JSON

    Introduzido a partir da versão 21c serve para armazenar arquivos JSON de maneira nativa em formato binário, isso melhora o desempenho, pois não há mais necessidade de conversão. Além do tipo de dados JSON, os arquivos JSON são suportados pelos tipos VARCHAR2, BLOB e CLOB.


Fonte:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-A3C0D836-BADB-44E5-A5D4-265BA5968483

23 de mar. de 2021

Tipos de Dados - Numéricos

    Seguindo conhecendo os tipos de dados suportados pelo Banco de Dados Oracle, agora vamos entender como funcionam os tipos de dados numéricos.

NUMBER

    O tipo de dados NUMBER pode armazenar 0, valores negativos até  1.0 x 10-130 e valores positivos até 1.0 x 10126 sem incluí-lo, caso seja igual ou maior retornará erro. 

    A sintaxe para criação de uma coluna do tipo NUMBER é NUMBER(p,e) onde p indica precisão e o e escala. Mas o que seriam precisão e escala para uma coluna NUMBER?

Precisão de uma coluna NUMBER indica quantas dígitos serão armazenados.

Já a escala determina a quantidade de casas decimais o número irá suportar incluindo esse valor, no caso de um valor positivo. No caso de um valor negativo, a precisão irá arredondar a quantidade de casas log antes da virgula.

    Também é possível criar uma coluna determinando apenas a precisão, nesse caso a sintaxe do tipo da coluna seria NUMBER(p). Seguem alguns exemplos de configurações utilizadas como NUMBER:

Dado informadoDefinição da ColunaArmazenado como

123.89

NUMBER

123.89

123.89

NUMBER(3)

124

123.89

NUMBER(3,2)

excede a precisão

123.89

NUMBER(4,2)

excede a precisão

123.89

NUMBER(5,2)

123.89

123.89

NUMBER(6,1)

123.9

123.89

NUMBER(6,-2)

100

.01234

NUMBER(4,5)

.01234

.00012

NUMBER(4,5)

.00012

.000127

NUMBER(4,5)

.00013

.0000012

NUMBER(2,7)

.0000012

.00000123

NUMBER(2,7)

.0000012

1.2e-4

NUMBER(2,5)

0.00012

1.2e-5

NUMBER(2,5)

0.00001

FLOAT

    O tipo de dados FLOAT é considerado um subtipo do tipo NUMBER, esse tipo também permite sua declaração com ou sem precisão da mesma maneira que o tipo NUMBER, já a escala não pode ser definida e é interpretada pelos dados. O tipo FLOAT é utilizado com frequência para o armazenamento de pontos flutuantes, mas o que são pontos flutuantes? Basicamente é um número real, que pode ter uma vírgula em qualquer posição dele ou simplesmente não ter uma vírgula, podendo ser representado por notação exponencial.

Segue um comparativo do armazenamento de dados em colunas do tipo NUMBER e FLOAT.

CREATE TABLE test (col1 NUMBER(5,2), col2 FLOAT(5));

INSERT INTO test VALUES (1.23, 1.23);
INSERT INTO test VALUES (7.89, 7.89);
INSERT INTO test VALUES (12.79, 12.79);
INSERT INTO test VALUES (123.45, 123.45);

SELECT * FROM test;

      COL1       COL2
---------- ----------
      1.23        1.2
      7.89        7.9
     12.79         13
    123.45        120
    A conversão de um número binário para precisão decimal se faz pela multiplicação de n por 0.30103, já para a conversão de um decimal para precisão binária a multiplicação é feita por 3.32193. O valor máximo armazenado é de 126 dígitos com precisão binária que é equivalente a 38 dígitos de precisão decimal.

BINARY_FLOAT

    O tipo de dados BINARY_FLOAT é um dado de ponto flutuante de 32 bits com precisão individual e que cada BINARY_FLOAT requer 4 bytes.

BINARY_DOUBLE

    É um tipo de dados de ponto flutuante de 64 bits com precisão de duas casas e que cada BINARY_DOUBLE requer 8 bytes.

    A diferença entre tipos de NUMBER e os BINARY é que colunas NUMBER tem precisão decimal enquanto os BINARY a precisão é binária. Os tipos binários suportam valores especiais infinitos e valores Not a Number (NaN).


BINARY_FLOATBINARY_DOUBLE

Valor máximo positivo finito

3.40282E+38F

1.79769313486231E+308

Valor mínimo posiitivo finito

1.17549E-38F

2.22507485850720E-308


Fonte:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-A3C0D836-BADB-44E5-A5D4-265BA5968483

22 de mar. de 2021

Tipos de Dados - Caracteres

    Seguindo com os tipos de dados vamos entender os tipos de dados de caracteres, que basicamente são CHAR, NCHAR, VARCHAR2 e NVARCHAR2.

VARCHAR2

    Destinado para armazenar cadeia de caracteres de forma variável, dever ser informado o tamanho do campo no momento da criação da coluna, por exemplo, VARCHAR2(n) onde o n indica a quantidade máxima de caracteres que poderá ser armazenada na coluna, esse valor tem um mínimo de 1 byte ou caractere e pode ter no máximo 32767 bytes ou caracteres no caso do parâmetro MAX_STRING_SIZE ter o valor igual a EXTENDED ou no máximo 4000 bytes no caso do parâmetro estar configurado com o valor igual a STANDARD.

Como o tamanho é variável, em uma coluna VARCHAR(10), por exemplo, podemos ter valores como abaixo:

'asd'             -> Tamanho ocupado 3

'asdf12'        -> Tamanho ocupado 6

'asdfg12345-> Tamanho ocupado 10

NVARCHAR2

    Funciona da mesma maneira que o tipo VARCHAR2, contudo o tipo NVARCHAR2 permite definir a forma de codificação da coluna entre AL16UTF16 OU UTF8. Essa configuração também altera os tamanhos máximos suportados nesse tipo de coluna.

    Caso o parâmetro MAX_STRING_SIZE esteja com o valor STANDARD, a coluna irá suportar 2000 bytes para codificação AL16UTF16 e 4000 bytes para UTF8. Se o parâmetro estiver configurado para EXTENDED o tamanho suportado será de 16383 bytes para AL16URF16 e 32767 bytes para UTF8.

CHAR

    Armazena caracteres (alfanuméricos) com tamanho fixo no campo, ou seja, caso a coluna esteva definida com tamanho 10 e for inserido no campo o valor 'asd' os outros 7 espaços serão ocupados com espaços em branco ficando armazenado como 'asd       ' , sendo o mínimo 1 byte e o máximo 2000 bytes, na definição de uma coluna char devemos passar o tamanho do campo de acordo com a sintaxe char(n) onde n indica o tamanho em bytes. No exemplo citado acima em que coluna char(10), teríamos a coluna ocupada da seguinte maneira:

'asd       '      -> Tamanho ocupado 10

'asdfg12   '    -> Tamanho ocupado 10

'asdfg12345'  -> Tamanho ocupado 10

NCHAR

    Assim como o CHAR, armazena caracteres alfanuméricos  com tamanho fixo, contudo, pode variar de acordo com a codificação utilizada, assim como o NVARCHAR2. Quando não é informado na declaração o tamanho do campo ele assume o valor 1 como padrão. Os valores máximos são 1000 para codificação AL16UTF16 e 2000 caracteres para UTF8. Caso um valor CHAR tente ser armazenado em uma coluna NCHAR, o valor poderá ser aceito, pois o banco de dados fará uma conversão para o formato codificado na coluna NCHAR.

Fonte:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-A3C0D836-BADB-44E5-A5D4-265BA5968483

17 de mar. de 2021

Tipos de Dados

    Dentro do banco de dados Oracle temos as tabelas e cada tabela é formada por colunas, que representam tipos de dados semelhantes, ou seja, em cada linha da tabela os tipos de dados de cada coluna será igual.

E como podemos descobrir qual o tipo de dados de cada coluna de uma tabela? Simples, basta executar o comando abaixo.

    describe nome_tabela;

ou ainda, podemos abreviar o comando da seguinte maneira

    desc nome_tabela;

    O resultados destes comando é uma listagem das colunas da tabela com seu respectivo tipo de dados.


    Agora que já sabemos como identificar o tipo de dados das colunas de uma tabela precisamos saber o que são cada um deles. A importância do tipo de dados se deve a otimização de um banco de dados, por exemplo, em um banco bem modelado, um campo que contém datas deverá ser do tipo DATE, podemos até armazenar em uma coluna que armazene uma cadeia de caracteres, porém, isso não é o ideal, a maneira que o banco de dados trabalha será prejudicada nesse caso, da mesma maneira um número, podemos armazena-lo em uma coluna que não seja do tipo NUMBER, mas nesse caso ele será tratado pelo banco de dados não como número e sim como um caractere alfanumérico.

Fonte:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html#GUID-A3C0D836-BADB-44E5-A5D4-265BA5968483