Em um sistema gerenciador de banco de Postgres a colun...

Próximas questões
Com base no mesmo assunto
Q835196 Banco de Dados

      Em um sistema gerenciador de banco de Postgres a coluna SALARIO da tabela COLABORADOR foi definida como NUMERIC(8,2) e a coluna JUROS foi definida como NUMERIC (2,2). Foi criada uma view com a seguinte expressão:


CREATE VIEW LISTA_VALOR_JUROS AS

SELECT NOME, SALARIO * JUROS as JUROS_MES

FROM COLABORADOR


Assinale a opção que apresenta o tipo de dado da coluna JUROS_MES criado na view resultante dessa expressão.

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Resposta correta: D - NUMERIC

Para compreender este gabarito, é necessário conhecer as definições de tipos de dados em Sistemas de Gerenciamento de Banco de Dados (SGBD), especificamente no PostgreSQL. A coluna SALARIO foi definida como NUMERIC(8,2), o que significa que ela pode armazenar números com até seis dígitos antes da vírgula e dois dígitos após a vírgula, totalizando oito dígitos. Já a coluna JUROS foi definida como NUMERIC(2,2), o que implica que pode armazenar até dois dígitos após a vírgula e nenhum dígito significativo antes da vírgula.

Quando se realiza a operação de multiplicação entre estes dois campos, o resultado pode ter um número de dígitos antes da vírgula que seja a soma dos dígitos máximos antes da vírgula de ambos os campos mais um possível dígito adicional por conta do "carry" da multiplicação, bem como a soma dos dígitos depois da vírgula.

Neste caso, a multiplicação de um NUMERIC(8,2) por um NUMERIC(2,2) pode resultar em até 6 (do SALARIO) + 0 (do JUROS) + 1 (do "carry") = 7 dígitos antes da vírgula, e 2 (do SALARIO) + 2 (do JUROS) = 4 dígitos após a vírgula, o que resultaria em um NUMERIC(11,4). No entanto, o PostgreSQL lida com isso de uma forma flexível, utilizando o tipo NUMERIC sem uma precisão e escala fixas para o resultado de operações aritméticas.

Portanto, a alternativa correta é a letra D, pois o PostgreSQL automaticamente escolhe o tipo NUMERIC sem uma precisão ou escala predefinida para acomodar o resultado da expressão aritmética, garantindo que nenhuma informação seja perdida por conta de limitações no número de dígitos antes ou após a vírgula.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Essa pega os desatendos, o que a questão pede depois de todo o enrolation é apenas o TIPO, logo não há outro senão no NUMERIC.

Como não foi informado o tamanho e a precisão do tipo NUMERIC, o postgres assume como apenas NUMERIC (e permite armezenar qualquer número com tamanho máximo e precisão máxima).

 

Só relembrando:

 

NUMERIC(x, y) => x é a precisão e y é a escala.

 

NUMERIC(2,2) => 0.00 a 0.99

 

NUMERIC(8,2) => 0.00 a 999999.99 (sempre subtria a escala da precisão, o que sobrar é o tamanho da parte inteira)

Corringindo o colega acima que se equivocou no termo NUMERIC(x, y) => x é a escala e y é a precisão

Se não forem informados a escala e precisão, o tipo que assume é o NUMERIC.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo