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

Nenhum comentário:

Postar um comentário