Certamente é importante entender que o este artigo, Alterar registros banco dados, tratará o conteúdo sobre linguagem SQL – UPDATE, mais especificamente como alterar registros dentro de uma tabela de banco de dados.
Primeiramente, quando se prensa em alterar registros em Banco de Dados (BD) é importante rever dois conceitos: criação de tabelas e inserção de registros.
Dessa forma, é recomendado a leitura do artigo Inserir registros banco dados, inclusive para facilitar, será usada a mesma tabela e registros inseridos por seu experimento prático.
Sintaxe UPDATE
Finalmente, agora pode-se partir para a sintaxe do comando UPDATE.
Só para ilustrar, como apresentado abaixo, o UPDATE tem como componentes essenciais de sua sintaxe, o nome_da_tabela; o nome da, ou o nome das colunas e os valores respectivos para cada coluna definida; além, da possibilidade de aplicar critério(s) de filtro(s).
UPDATE nome_da_tabela SET nome_coluna = valor [,nome_coluna = valor...] [WHERE] [critério(s) de filtro(s)];
Por outro lado, é importante pontuar alguns aspectos sobre a aplicação deste comando:
- Um comando UPDATE aplica a alteração de registro(s) em uma única tabela.
- Um comando UPDATE, pode alterar nenhuma, uma, ou várias linhas de registros.
- No mínimo um comando UPDATE deve alterar o valor de uma coluna.
- É possível aplicar alteração de valores em mais de uma coluna em um único comando UPDATE.
- Um comando UPDATE pode ser aplicado sem a cláusula WHERE, só que dessa forma afetará todas as linhas de registros da tabela (exemplificando, se a tabela tiver mil registros, os mil serão alterados para o mesmo valor).
- A cláusula WHERE filtra as linhas de registros que serão aplicados em um comando UPDATE.
Experimento Prático
Para gerar o experimento prático será utilizada a tabela PESSOA e seus registros inseridos no artigo Inserir registros banco dados ORACLE.
Entretanto, para facilitar segue abaixo sua ilustração da tabela com seus registros.
PESSOA |
ID | NOME | GENERO | DATA_NASCIMENTO |
1 | MARIA | F | 12/03/1989 |
3 | PAULO | M | 12/03/2006 |
Da mesma forma, este experimento prático, pode ser aplicado através de 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.
Aplicando Comandos UPDATE
UPDATE PESSOA SET NOME = 'MARIA APARECIDA' WHERE ID = 1; -- 1 row(s) updated. UPDATE PESSOA SET GENERO = 'X' WHERE ID = 3; -- ORA-02290: check constraint... UPDATE PESSOA SET DATA_NASCIMENTO = '07/11/1974' WHERE ID = 3; -- ORA-01843: not a valid month... UPDATE PESSOA SET DATA_NASCIMENTO = TO_DATE('07/11/1974', 'DD/MM/YYYY') WHERE ID = 3; -- 1 row(s) updated. UPDATE PESSOA SET NOME = 'CLAUDIA MARIA', GENERO = 'F' WHERE ID = 3; -- 1 row(s) updated.
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 UPDATE da linha 1 alterou o campo NOME do registro na tabela de ID = 1:
- Com a aplicação deste comando UPDATE o nome do registro com ID igual a 1 foi alterado, no caso o campo NOME passou de MARIA para MARIA APARECIDA.
O UPDATE da linha 5 não altera o registro:
- Da mesma forma que ocorre em um INSERT, todos os comandos UPDATEs que são aplicados passam pelas checagens das constraints das tabelas, nesse caso o campo GENERO só aceita os valores M ou F, quando X é passado ocorre uma violação de constraint.
O UPDATE da linha 9 registro alterado:
- Agora o valor data foi envolvido pela função de conversão TO_DATE, tirando qualquer possibilidade de inversão ou entendimento, pois é passado o formato para checagem.
O UPDATE da linha 13 não altera o registro:
- O campo data para que seja interpretado da forma correta dentro de um banco de dados ORACLE deve usar a função TO_DATE para passar um valor. Assim, não corre o risco de inverter mês com dia, ou dia com mês em virtude da regionalização empregada na instalação, ou de não aplicar a alteração, como neste exemplo.
O UPDATE da linha 17 não altera o registro:
- Neste exemplo, dois campos têm seus valores alterados. O campo nome passa para CLAUDIA MARIA e o GENERO passa para F, demonstrando um exemplo com mais de um campo.
Características
Reforçando as características do comando:
- Altera apenas registros de uma única tabela.
- Pode ou não informar todas as colunas.
- Em bancos de dados transacionais os UPDATE só são efetivados com o uso do COMMIT, caso não queira que seja efetivado pode anular com ROLLBACK.
- 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).
- Na cláusula SET os campos não precisam estar na ordem de criação da tabela, esta ordem pode ser aleatória. Lembrando que os campos devem ser separados por vírgula.
Boas Práticas
- Como boas práticas não se devem aplicar um UPDATE sem a cláusula WHERE:
- Pois pode afetar todas as linhas de registro com o mesmo valor.
- Como exemplo, se pegar o UPDATE da linha 1 e tirar o WHERE para aplicá-lo, todos os registros terão como valor para a coluna nome MARIA APARECIDA.
- Depois de aplicado um COMMIT para efetivar este UPDATE, não seria possível voltar os valores anteriores.
- Sendo essa recuperação muito complicada (em alguns casos só sendo possível com volta do BACKUP do banco de dados; e mesmo assim com perda de alguns valores).
- Há riscos de mesmo com o BACKUP de não conseguir voltar todos os valores.
- Outra boa prática é aplicar um SELECT com a mesma cláusula WHERE que o UPDATE será aplicado, para verificar a quantidade de registros que podem sofrer a ação do comando.
- Essa verificação antes de aplicar o UPDATE pode indicar se algo está fora do esperado.
- Exemplo: era para alterar uma linha, mas o SELECT de checagem tá mostrando 3 linhas que podem ser afetadas com este WHERE.
- Isso indica que o WHERE deve ser checado novamente, pode haver um erro, a falta de um filtro, etc.
- Lembrando, o comando SELECT não alterar os registros, é um recurso de visualização de registros.
Conclusão
Enfim, a alteração de registros de um banco de dados é o passo posterior criação e inserções de registros em uma tabela.
Por isso, o foco deste artigo foi o de apresentar de uma forma simples e prática o assunto alterar 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.
Para ver mais artigos relacionados à Banco de Dados, clique aqui.