Banner Hospedagem de Sites
14/04/2020

Inserir registros banco dados

Certamente é importante entender que o post Inserir registros banco dados, tratará o conteúdo sobre linguagem SQL – INSERT INTO, mais especificamente como inserir registros dentro de uma tabela de banco de dados.

Primeiramente, quando se prensa em inserir registros em Banco de Dados (BD) é importante ter os conceitos de Modelo Entidade Relacionamento (MER) e a sua transformação em tabelas de Banco de Dados (BD).

Conceito Entidade x Tabela

Portanto, é fundamental relembrar alguns conceitos relacionados a modelagem de dados, onde um de seus objetos principais são as entidades, contêineres que são responsáveis em guardar os dados de uma entidade específica.

Contudo, essas entidades são transformadas em tabelas com seus campos, esses são os objetos utilizados por um banco de dados para armazenar seus registros.

Figura 1: Transformação entidade para tabela.

Figura 1: Transformação entidade para tabela.

De acordo com a Figura 1, a entidade PESSOA, que apresenta os atributos ID, NOME, GENERO e DATA NASCIMENTO, neste tipo de artefato não há a preocupação em que banco de dados está será implementada, sendo apenas uma representação lógica.

Já na passagem para a representação física é importante a definição do banco de dados, neste caso ORACLE, pois os campos devem ter as tipagens definidas, quando transformados em tabelas.

De fato, a representação que importa é a tabela, que está implementada no BD e que sofrerá a ação do comando INSERT INTO.

Nesse meio tempo, note que a simbologia (PK), *, o; na frente dos campos da tabela representam respectivamente: chave primária (Primary Key), Não permite nulo (NOT NULL) e permite nulo (NULL).

Sintaxe INSERT INTO

Finalmente agora pode-se partir para a sintaxe do comando INSERT INTO.

Só para ilustrar, como apresentado abaixo, tem como componentes essenciais além de sua sintaxe, o nome_da_tabela; o nome da, ou o nome das colunas e os valores respectivos para cada coluna definida.

INSERT INTO nome_da_tabela
   [(nome_coluna [, nome_da_coluna_2])]
VALUES
   (valor_da_coluna [, valor_da_coluna]);

Por outro lado, é importante pontuar alguns aspectos sobre a aplicação deste comando:

  • Um comando INSERT INTO aplica a inserção do registro em uma única tabela.
  • Um comando INSERT INTO, insere uma linha de registro por vez.
  • É possível omitir as colunas na aplicação de um comando INSERT INTO, mas os valores para cada coluna têm que aparecer na mesma ordem da criação da tabela; neste caso, mesmo as colunas que permitem nulo devem receber valores.
    • Problema da situação acima, pode-se sem intenção inverter valores compatíveis entre as colunas, por passar valores na ordem diferente da criação da tabela – situação difícil de arrumar depois de colocado em produção.
    • Dessa forma não é aconselhável esta prática, de omitir as colunas na aplicação do comando INSERT INTO, pois sempre que a estrutura de uma tabela for modificada terá que rever todas as aplicações deste comando.

Experimento Prático

Para gerar o experimento prático será criada a tabela PESSOA apresentada anteriormente na Figura 1.

Comando para criar a tabela PESSOA:

CREATE TABLE PESSOA(
    ID NUMBER(10) PRIMARY KEY,
    NOME VARCHAR2(120) NOT NULL,
    GENERO CHAR(1) NOT NULL,
    DATA_NASCIMENTO DATE NULL,
    CONSTRAINT CK_GENERO_PESSOA CHECK (GENERO IN ('M', 'F'))
);

Só para exemplificar, este experimento prático, pode ser praticado em uma máquina virtual, ou uma máquina normal que tenha uma versão do ORACLE instalada (pode ser a versão Express Edition).

Ou, pode ser usada o Oracle Live SQL, versão online via browser para testes disponibilizado pela própria Oracle (necessita apenas ter uma conta válida em seu site).

Este artigo utilizara da ferramenta online Oracle Live SQL para realizar os experimentos práticos.

Já criada a tabela PESSOA, chega o momento de aplicar os comandos para inserir registros.

Aplicando Comandos INSERT INTO

INSERT INTO PESSOA 
  VALUES (1, 'MARIA', 'F', TO_DATE('12/03/1989','DD/MM/YYYY'));
-- 1 row(s) inserted
INSERT INTO PESSOA 
  VALUES (2, 'PEDRO', 'X', TO_DATE('05/10/1972','DD/MM/YYYY'));
-- erro relacionado a constraint de CHECK - CK_GENERO_PESSOA
INSERT INTO PESSOA 
  VALUES ('PEDRO', 2, 'M', TO_DATE('05/10/1972','DD/MM/YYYY'));
-- erro relacionado a inversão de valores entre ID e NOME
INSERT INTO PESSOA 
  VALUES (2, 'CLAUDIA', 'F', '12/03/2001');
-- erro nem todas as instalação do ORACLE 
-- (depende da regionalização) aceita a 
-- data direta
INSERT INTO PESSOA 
  VALUES (2, 'CLAUDIA', 'F'); 
-- ORA-00947: not enough values 
INSERT INTO PESSOA 
  (ID, NOME, GENERO, DATA_NASCIMENTO) 
  VALUES (3, 'PAULO', 'M', TO_DATE('12/03/2006','DD/MM/YYYY'));
-- 1 row(s) inserted

A saber, todos os valores relacionados a campos texto, como as colunas NOME e GENERO deve estar entre apóstrofos.

Por outro lado, para passar com precisão a data para o ORACLE, é importante o uso da função TO_DATE.

Função que converte um texto que está entre apóstrofos em data no formato a seguir, como acontece no campo DATA_NASCIMENTO.

Explicação do SCRIPT acima

O INSERT INTO da linha 1 insere o registro na tabela:

  • Pois independentemente de não ter o nome das colunas, passa os valores na ordem correta, atentando que não é obrigatório informar as colunas, desde que respeite a ordem de criação da tabela.

O INSERT INTO da linha 4 não insere o registro na tabela:

  • Pois infringe uma regra (constraint) que foi aplicada na construção da tabela que permite apenas os valores M ou F para o campo GENERO.

O INSERT INTO da linha 7 não insere o registro na tabela:

  • Pois infringe a ordem dos campos, ouve uma inversão no valor, o valor do NOME (PEDRO) veio antes do valor do ID (2).

O INSERT INTO da linha 10 não insere o registro na tabela:

  • Pois não são todas as instalações que aceitam passar a data como um texto sem o uso da função TO_DATE.
  • Porque nem sempre é reconhecido o formato da data automaticamente, é o mês primeiro (formato americano), ou o dia primeiro (formato latino).

O INSERT INTO da linha 15 não insere o registro na tabela:

  • Pois quando não são informadas as colunas no VALUES deve-se ter valores para todas as colunas na ordem de criação das colunas da tabela. Neste caso, faltará o valor para a DATA_NASCIMENTO e retornará o erro ORA-00947: not enough values.

O INSERT INTO da linha 18 insere o registro na tabela:

  • pois define a ordem das colunas (ID, NOME, GENERO, DATA_NASCIMENTO) e respeita essa ordem na passagem dos valores, onde o primeiro valor entra na primeira coluna, o segundo valor na segunda coluna e assim por diante.

Só para exemplificar, quando define as colunas as mesmas não precisam ficar na ordem de criação, pode ser uma ordem diferente, desde que mudem a ordem dos valores também.

Entretanto, quando informar as colunas deve colocar obrigatoriamente as colunas NOT NULL e PK, ou seja, pode omitir apenas as que permitem NULL.

Aliás, é importante destacar que os experimentos práticos serão aplicados a uma única tabela, no caso a PESSOA.

E não tratará do tema inserção em tabelas relacionadas, que fará parte de um outro artigo a parte.

Características

Reforçando as características do comando:

  • Insere apenas um registro por vez em uma única tabela.
  • Pode ou não informar todas as colunas.
  • Se informar as colunas tem que colocar todas as obrigatórias.
  • Em bancos de dados transacionais os INSERTS só são efetivados com o uso do commit, caso não queira que seja efetivado pode anular com rollback.
  • Não é necessário informar as colunas, pode seguir os valores de acordo com a ordem de criação dos campos.
    • Ponto crítico, se a tabela for recriada em uma ordem diferente pode colocar valor em colunas trocadas (dica sempre coloque as colunas com os respectivos values (valores);
  • Campo data, ou data hora, usar a função to_date para informar valor (isso impede inversão de data devido ao formato americano ou latino).

Conclusão

Enfim, a inserção de registros nas tabelas de um banco de dados é o passo posterior a criação do modelo de dados que será aplicado.

Assim, sendo uma atividade importante ao processo.

Por isso, o foco deste artigo (post) foi o de apresentar de uma forma simples e prática o assunto inserir registros em tabela de banco de dados ORACLE.

Contudo, o uso de uma metodologia fundamentada em experimentos práticos dirigidos a um problema ajuda no entendimento e facilita no posterior aprofundamento do tema.

Esse artigo apresenta um adendo, um vídeo complementar na plataforma youtube, que pode ser acessado, clicando no link. Ou assistido aqui no próprio artigo:

Para ver mais artigos relacionados à Banco de Dados, clique aqui.

Share

Luis Alexandre da Silva

Professor e Consultor de tecnologia em desenvolvimento de sistemas.Possui mestrado em Ciência da Computação pela UNESP (2016), especialização em Gestão Integrada de Pessoas e Sistemas de Informação pela FIB (2008) e graduação em Análise de Sistemas pela Universidade do Sagrado Coração (1997).Por fim, tem experiência em Gerenciamento de Projetos, Linguagens de Programação e Banco de Dados. Atuando principalmente nos seguintes temas: ensino, gerenciamento de projetos, ITIL, Desenvolvimento WEB e processos BPO.

Você pode querer ver também...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *