Chegamos na segunda aula de SQL do Curso Oracle PL/SQL, nesta aula você vai aprender os comandos INSERT, UPDATE, DELETE, TRUNCATE e o DROP. Estes comandos são a base do SQL e existem várias variações deles, não vou conseguir passar todas as variações nem todas as funções possíveis, devido ao nosso tempo e também ao que o Curso Oracle PL/SQL propõe, pois este é um curso básico.
Os campos INSERT, UPDATE e DELETE fazem parte do grupo de comandos DML, como vimos na última aula. Já os comando DROP e TRUNCATE são comandos DDL, se você não se lembra dos comandos de uma olhada na última aula clicando aqui! Agora vou passar a vocês uma explicação breve sobre cada comando:
[well]INSERT: Este comando serve para cadastrar dados dentro de uma tabela, ele trabalha a nível de linhas, ou seja quando ele é executado insere uma ou mais linhas dentro da tabela. Sua sintaxe principal é “INSERT INTO [NOME_TABELA] ( [NOME_CAMPO1, NOME_CAMPO2, NOME_CAMPO_3 …] ) VALUES ([VALOR_CAMPO1, VALOR_CAMPO2, VALOR_CAMPO3 …]); ”
Além dessa forma também podemos fazer um INSERT sem colocar os campos da tabela após o nome dela, mas desse jeito os valores tem que ficar na ordem em que os campos foram declarados na tabela, se vocês colocarem na ordem errada os campos serão inseridos no lugar errado, nesta outra versão o comando ficaria da seguinte forma: “INSERT INTO [NOME_TABELA] VALUES ([VALOR_CAMPO1, VALOR_CAMPO2, VALOR_CAMPO3 …]);”[/well]
Para mostrar melhor como seria vou usar o exemplo do INSERT vou usar as tabelas TB_PRODUTO e TB_TIPO_PRODUTO, que foi criada na última aula, utilizando os dois exemplos :
Fiz um INSERT com os valores, mas vocês viram que o comando não funcionou, e vocês sabem o porque não funcionou? É porque estamos trabalho com o Oracle que é um SGDB Relacional e quando tentamos inserir um registro em uma tabela que possui referencia de outra tabela e este registro não existe nesta outra tabela, temos este erro. Basicamente estamos tentando inserir um Produto que não possuí um tipo cadastrado e para resolver isso vamos cadastrar um Tipo.
Vocês viram que para inserir a linha da TB_TIPO_PRODUTO que não especifiquei as colunas da tabela que seriam inseridas e o comando funcionou, agora vamos inserir o registro na TB_PRODUTO, especificando as colunas.
Vocês perceberam algumas coisas na hora de eu colocar os valores nesse último INSERT? Agora vou passar para vocês algumas regras que servem para todos os comandos DML desta aula:
[alert style=”red”]Todo os valores cujo o tipo é VARCHAR2 ou CHAR são colocados entre parênteses, se eles não forem colocados desta forma o Oracle não entende que eles são deste tipo e vai dar erro na hora de executar o comando.[/alert]
[alert style=”red”]Valores para campos numéricos com precisão, como é o caso dos preços, o número inteiro vem separado da sua casa decimal por um ponto “52.75”[/alert]
[alert style=”red”]O valor SYSDATE, significa a data que está no servidor atual, com hora, minuto e segundo o formato desta data é o padrão do servidor, quando colocamos +5 significa a data do servidor mais 5 dias, mais para frente vamos aprender como somar minutos, segundos, horas ou qualquer outro parâmetro de tempo nos campos to tipo data. Além do sysdate, também poderíamos usar a função TO_DATE, que será passada no próximo post sobre funções SQL.[/alert]
Bastante coisa no INSERT e ainda nem começamos direito, agora chegou a hora do UPDATE, vamos a uma explicação breve deste comando.
[well]UPDATE: Esta instrução permite que você atualize um ou mais valores de coluna em uma linha ou um conjunto de linhas em uma tabela. Para distinguir as linhas que serão atualizadas é utilizado a clausula WHERE, que serve para limitar a quantidade de registros a serem atualizados de acordo com as condições que são solicitadas.
Se nenhuma clausula WHERE for colocado no comando todas as linhas da tabela serão atualizadas. A clausula WHERE é também utilizada nos comandos DELETE e SELECT. O esqueleto do comando seria UPDATE [NOME_TABELA] SET [NOME_COLUNA1] = [VALOR_COLUNA1], [NOME_COLUNA2] = [VALOR_COLUNA2] … WHERE [NOME_COLUNA_ALTERADA] = [VALOR_COLUNA_ALTERADA] [/well]
Um exemplo do comando UPDATE. Vamos dizer que na o preço do Bolo de Chocolate aumentou de R$75.50 para R$79.00, então como vamos fazer isso? simples com um UPDATE. Segue o comando abaixo.
Supondo que nós não temos o ID_PRODUTO, apenas o nome e o tipo dele na hora de fazer a atualização e nesta tabela tenhamos além do Bolo de Chocolate inteiro, também tem o registro do Bolo de Chocolate em pedaços. Esse bolo em pedaço custa R$ 5,00 e queremos atualizar este valor para R$5,50 , mas sem atualizar os dados do bolo de chocolate inteiro, afinal não faria sentido o bolo de chocolate inteiro custar R$5,50 . Então temos o seguinte UPDATE.
Neste passo vimos que se inserirmos uma cláusula WHERE com um AND, conseguimos limitar mais a atualização conforme a nossa necessidade. Nesses casos se tivéssemos colocado apenas WHERE NM_PRODUTO = ‘BOLO DE CHOCOLATE’ iriamos atualizar duas linhas, uma com o pedaço e a outra com o bolo inteiro, então por isso é muito importante o WHERE, pois com ele conseguimos fazer as alterações conforme as nossas necessidades.
E chegou a hora do último comando DML da aula SQL Parte 02, que o DELETE, abaixo uma breve descrição sobre este comando.
[well]DELETE: Assim como o INSERT Este comando trabalha a nível de linha. Você deleta uma ou mais linhas com a instrução DELETE. Assim como com a instrução UPDATE, você geralmente terá uma cláusula WHERE, do contrário você deleta todas as linhas da tabela.
A estrutura do DELETE é a seguinte: DELETE FROM [NOME_TABELA] WHERE [CLAUSULA_ALTERAR][/well]
Agora vamos ao exemplo prático, vamos deletar o registro referente ao pedaço do Bolo de Chocolate da tabela TB_PRODUTO.
Com esta explicação fechamos os quatro comandos DML de hoje, INSERT, UPDATE e o DELETE, além desses temos o SELECT, mas eu acho que este comando é muito importante e muito extenso, por isso decidi fugir do planejamento inicial do curso e fazer mais 2 aulas sobre SQL, a Parte 03 do SQL terá apenas as funções de SQL mais utilizadas e como elas ponde ser usadas, na parte 04 teremos uma aula somente sobre SQL.
O TRUNCATE é um comando DDL que tem uma função muito parecida com o DELETE, mas com algumas diferenças, ao executar um TRUNCATE você vai remover todos os registros da tabela, não existindo a possibilidade de recuperá-los com um ROLLBACK (Que vocês aprenderam mais para frente no curso). Além disso não não conseguimos usar a clausula WHERE, porque ele deleta todos os registros.
[well]Sua Sintaxe é a seguinte TRUNCATE TABLE [NM_TABELA]. Ele é usado quando você quer excluir todos os registros da tabela e como ele não guarda as informações em memória em caso de ROLLBACK ele se torna mais rápido que o DELETE.[/well]
Chegamos ao ultimo comando de hoje, este é um comando também é do tipo DDL e é responsável por excluir objetos do banco de dados, este comando é o DROP. Quando ele é rodado ele exclui todos os registros (No caso das tabelas) e o objeto são excluídos, e não temos mais como recuperarmos o objetos/registros (Esta possibilidade só existe acionando o DBA e solicitando que o mesmo faça um RESTORE da base, mas este é um procedimento demorado e que tem um impacto muito grande dependendo do ambiente que você está trabalhando, por esse motivo ele deve ser evitado a todo curso), assim como o TRUNCATE. Abaixo segue um exemplo de um DROP TABLE.
Como vocês podem ver, mais um exemplo de como um SGDB Relacional trabalha. Tentamos dropar a tabela TB_TIPO_PRODUTO, porém ela possui registros que estão ligados na TB_PRODUTO e por esse motivo tivemos este erro. Para que este comando funcione precisamos primeiro dropar a tabela TB_PRODUTO. Que é o que eu fiz na imagem abaixo.
[well]Além de tabelas o DROP também é utilizado para deletar qualquer tipo de objeto da base de dados, como por exemplo VIEWs, PACKAGEs, PROCEDUREs e etc, a sua sintaxe é a seguinte DROP [TIPO_OBJETO][NOME_OBJETO];[/well]
Fechamos assim a segunda parte da aula de SQL, espero que vocês tenham gostado. Caso vocês tenham alguma dúvida entrem na nossa comunidade do facebook e postem lá. Na comunidade estamos interagindo bastante e o pessoal esta dando bastante ideias de como eu posso melhorar o curso, caso você queira acrescentar algo ou dar a sua opinião sobre o curso, entre lá a sua interação é muito importante para mim.
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Bom dia, sou desenvolvedor Oracle Pl/SQL há 10 anos, resolvi participar do curso para ter vivência na didática de aprendizado e só posso dar os parabéns pela iniciativa. Estou me preparando para dar aulas de Oracle também.
Aproveitando, na aula 2, no quadro vermelho que contém este texto:
“Todo os valores cujo o tipo é VARCHAR2 ou CHAR são colocados entre parênteses, se eles não forem colocados desta forma o Oracle não entende que eles são deste tipo e vai dar erro na hora de executar o comando.”, na verdade tem que corrigir o texto, os valores VARCHAR2 ou CHAR devem ser colocados obrigatoriamente entre ASPAS, não parênteses.
Parabéns mais uma vez pela iniciativa.
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?
Link permanente
Muito bom, parabéns, até agora foi só SQL, certo? O PL será nas próximas?