2
respostas

Declarando campo Boolean com tipo Integer ou Number?

Olá. No exercício de criar tabela apresentado no vídeo com o campos férias do tipo boolean, o professor orientou à criar o campo FERIAS como Integer null.

Fazendo o exercício para fixação do conhecimento, ao consultar a resposta, mostra como sugestão do professor, o campo PRIMEIRA_COMPRA também como boolean porém, a resposta para o campo foi declarada com o tipo number.

Qual a diferença? Deixando number não corro o risco de informar ao invés de 0 e 1 um valor tipo 1.1 ou 1.0 e tornar este campo com valores inconsistentes?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

CREATE TABLE CLIENTE ( CPF varchar(11) NOT NULL, ..... LIMITE_CREDITO float NULL, VOLUME_COMPRA float NULL, PRIMEIRA_COMPRA number(1) NULL, PRIMARY KEY (CPF) )

2 respostas

No vídeo da aula seguinte à essa o professor ainda demonstra como criar uma tabela pelo assistente do Oracle SQL Developes e criar a tabela de clientes justamente colocando para o campo PRIMEIRA_COMPRA o tipo integer.

Se não tem uma explicação plausível e lógica para o uso do tipo number na criação deste campo, acredito que seja um erro de digitação no material apenas.

Aguardarei as colocações e comentários para esclarecer essa dúvida.

Olá Ronald, tudo bem?

Desde já peço desculpas pela demora em obter retorno.

No Oracle, não existe o tipo de dado Boolean, por isso, é comum utilizar o tipo Integer com valores 0 e 1 para representar valores booleanos.

Na tabela CLIENTE, o campo PRIMEIRA_COMPRA foi definido como number(1). O número entre parênteses especifica a precisão desse campo numérico, no caso, 1 dígito. No contexto de armazenar valores booleanos, essa precisão é adequada, pois pode representar apenas dois valores: 0 e 1. Então, o campo será capaz de armazenar somente esses dois valores sem permitir casas decimais.

Por exemplo, ao definir o campo como NUMBER(1) e tentar inserir um valor com mais de dois dígitos vai dar erro. Como no código abaixo:

CREATE TABLE Exemplo (
  id NUMBER(1)
);

INSERT INTO Exemplo (id)
VALUES (5); -- Valor válido para NUMBER(1)

INSERT INTO Exemplo (id)
VALUES (12); -- Erro! Valor 12 excede a precisão de NUMBER(1)

Ronald, aproveito para comunicar que esse curso ganhou uma versão atualizada: Oracle Database: manipulando dados com comandos DML.

Portanto, não há esse risco de tornar os valores inconsistentes.

Espero ter ajudado a esclarecer suas dúvidas.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!