Manipulação de Dados No Oracle: Inserindo Dados Linha A Linha
Manipulação de Dados No Oracle: Inserindo Dados Linha A Linha
O comando INSERT insere linhas em uma tabela. A forma mais simples do comando INSERT insere somente
uma linha , dados os valores conforme a sintaxe abaixo:
Onde:
Cláusula Descrição
schema E o schema que contém a tabela
nome_tabela O nome da tabela a ser atualizada
Coluna n A coluna que queremos inserir
Valor n É o novo valor associado à coluna a ser inserida
Vejamos um rápido exemplo de inserção na tabela de departamento, dentro do uma Linha a Linha.
Nota:
• Observe que o comando informa as 3 colunas da tabela C_Depto e, em seguida, define 3 valores que a elas
serão atribuídas (na mesma ordem)
Vamos analisar um outro comando INSERT, semelhante ao comando acima e que tem a seguinte sintaxe:
Exemplo
Nota:
• Desta vez não foram especificadas as colunas que receberão os valores. Neste caso o comando utilizará
todas as colunas da tabela na ordem em que foram criadas.
• Você pode utilizar o comando DESCRIBE do SQL*Plus para verificar as colunas de uma tabela e sua ordem.
Caso alguma coluna deva ficar com valor NULO em uma inserção, basta omitir o nome da mesma na lista de
colunas. Vejamos um exemplo onde isto ocorre:
Nota:
• No exemplo acima foram omitidas diversas colunas, assim o valor 60 foi atribuído à coluna id, o texto
‘OLIVEIRA' foi atribuído à coluna utl_nome e o texto ‘Secretaria foi atribuído à coluna cargo.
• As demais colunas ficaram com NULO. Observe que NULO não é equivalente a 0 (zero), espaço ou qualquer
outro valor. NULO é, justamente, a ausência de qualquer valor na coluna.
• Nossas restrições (constraints) podem impedir que uma coluna contenha NULOs, existindo inclusive uma
constraint específica para isto (constraint NOT NULL). Nenhuma coluna definida como chave primária poderá
conter NULO. No nosso exemplo acima, se não fosse especificado um valor para a coluna id a inserção
resultaria em erro. O mesmo erro ocorreria se não tivéssemos incluído um valor para a coluna ult_nome já que
a mesma é de preenchimento obrigatório. (constraint NOT NULL)
O Comando UPDATE
Para alterarmos dados já existentes em nossas tabelas utilizaremos o comando UPDATE.
Veja a sintaxe do comando abaixo:
Onde:
Cláusula Descrição
schema É o schema que contém a tabela
Nome_tabela O nome da tabela a ser atualizada
colunan A coluna que queremos alterar
expressão É o novo valor associado à coluna a ser alterada
subquery Um comando SELECT que retornará o novo valor da coluna
condição A condição que deverá satisfazer as colunas que serão alteradas
UPDATE C_EMPR
SET SALARIO = SALARIO * 1.5;
Restringindo a Atualização
Assim como no comando SELECT posso limitar as linhas recuperadas, indicando ao comando UPDATE que
altere apenas parte da tabela de acordo com meu interesse.
Vamos alterar o comando acima para que altere apenas os salários menores ou iguais a 1500:
UPDATE C_EMPR
SET SALARIO = SALARIO * 1.5
WHERE SALARIO <= 1500;
Posso também alterar várias colunas ao mesmo tempo, evitando a execução múltipla do comando.
Vejamos um exemplo no qual os empregados de id 20 a 23 tem seu salário alterado para 100 e passam a ser
subordinados ao empregado 10:
UPDATE C_EMPR
SET ID_GERENTE = 10,
SALARIO = 100
WHERE ID IN (20,21, 22, 23) ‘ ;
O Comando DELETE
Onde:
Cláusula Descrição
schema E o schema que contém a tabela
Nome_tabela O nome da tabela a ser deletada
condição A condição que deverá satisfazer as colunas que serão deletadas
Exemplo
Nota:
• Com este comando, todas as linha da tabela NIVEL SALARIAL foram removidas.
Restringindo a Deleção
Nota:
• Neste exemplo excluímos todas as linhas da tabela c_nível_salarial que possuíam ID com valor igual ou
menor a 3.
No laboratório anterior vimos o estudo de subqueries porém, estes não foram abordados juntamente com
comandos de manipulação de dados. Veremos agora como podemos escrever subqueries em comandos INSERT,
UPDATE e DELETE.
Eventualmente, podemos inserir várias linhas numa tabela a partir de um único comando INSERT, visto que este
pode receber o resultado de uma subquery.
Vamos inicialmente criar uma tabela que tenha a mesma estrutura da tabela c_depto, para tal de o seguinte
comando:
Para inserirmos agora na tabela criada todo o conteúdo da tabela c_depto daríamos o seguinte comando:
Nota:
• Agora COPIA_DEPTO terá a mesma estrutura e as mesmas linhas da tabela C_DEPTO.
• Também é possível inserir múltiplas linhas numa tabela a partir da leitura dela mesma como no exemplo
abaixo:
• Somente poderemos executar este comando caso não haja nenhuma coluna definida com restrição de
unicidade como PRIMARY KEY ou UNIQUE KEY.
• Na realidade, o SQL nos permite fazer isso, exatamente porque este comando é executado em duas fases,
quer dizer, na 1ª ele faz o SELECT e retém os valores em memória (ou disco caso a tabela seja muito grande)
e em seguida, faz a inserção.
• Neste caso as linhas serão duplicadas.
Subquery em UPDATE
.
Nota:
A empresa resolveu alterar o colocar todos os almoxarifes subordinados ao gerente do empregado de ID 20,
porém o valor, no momento da alteração, era desconhecido, Logo a forma é através de uma subquery, que retorna
para o comando UPDATE o valor desejado.
Subquery em DELETE
SQL> DELETE FROM COPIA_DEPTO
2 WHERE ID IN (SELECT ID
3 FROM C_DEPTO
4 WHERE NOME = ‘Vendas’);
O Oracle assegura a consistência dos dados baseado nas transações. As transações dão mais flexibilidade e
controle quando da mudança do conteúdo das tabelas e asseguram a consistência dos dados em caso de falhas
nos processos do usuário ou falhas no sistema.
Uma transação consiste de comandos DML (insert, update,delete,commit,rollback) que fazem uma mudança
consistente nos dados. Por exemplo, uma transferência de valores entre duas contas bancárias implica no débito
em uma conta e no crédito em outra no mesmo montante. Ambas as ações ou são realizadas ou são anuladas. O
crédito não pode ser concretizado sem o correspondente débito.
Uma transação começa quando o primeiro comando SQL executável é encontrado e termina quando:
• Um comando COMMIT ou ROLLBACK aparece
• Um comando DDL (CREATE, ALTER, DROP, RENAME) ou um comando DCL (GRANT, REVOKE,
AUDIT, DROP,RENAME) aparece
• Certos erros são identificados, como um deadlock
• O usuário sai do SQL*Plus
• O computador é desligado
Após uma transação terminar, o próximo comando SQL executável automaticamente inicia uma nova transação.
COMMIT: Encerra a transação corrente fazendo com que todas as modificações pendentes passem a ser
definitivas.
ROLLBACK: Encerra a transação corrente fazendo com que todas as modificações pendentes sejam
desprezadas.
Todas as modificações feitas durante a transação são temporárias até que a transação seja “commited”
(concretizada).
Situação do dado antes do COMMIT ou do ROLLBACK:
• As operações de manipulação de dados primeiramente afetam o buffer do banco de dados.
• O usuário corrente pode rever os resultados das operações de manipulação de dados usando o comando
SELECT.
• Outros usuários NÃO podem ver os resultados das operações de manipulação de dados do usuário
corrente.
• As linhas afetadas ficam bloqueadas; outros usuários não podem modificar os dados existentes nas linhas
afetadas.
Acompanhe os exemplos:
Nota:
• Os três departamentos acima inseridos com o comando INSERT podem ser visualizados pelo usuário que os
executou em sua própria sessão, através de comandos SELECT.
• O mesmo usuário em outra sessão (outra execução do programa SQL*PLUS, por exemplo) ou outros usuários
que tenham acesso à mesma tabela, ainda não terão acesso a estes novos dados.
Exemplo
Nota:
Como conseqüência do último Commit, os dados das duas primeiras inserções foram salvos e apenas o último
insert foi desfeito.