0% acharam este documento útil (0 voto)
8 visualizações7 páginas

Manipulação de Dados No Oracle: Inserindo Dados Linha A Linha

Enviado por

SIDNEY VENTURY
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
8 visualizações7 páginas

Manipulação de Dados No Oracle: Inserindo Dados Linha A Linha

Enviado por

SIDNEY VENTURY
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 7

DML

Manipulação de Dados no Oracle


SUMÁRIO
• Conceituaremos o comando Insert
• Inserindo dados Linha a Linha
• Utilizando um comando SELECT para inserir dados
• O Comando UPDATE
• O Comando DELETE
• Subqueries nos comandos DML
• Conceituando transações

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:

insert into schema.<nome_tabela> (coluna1, coluna2, ..., colunan)


values (valor1, valor2, ..., valorn);

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.

INSERT INTO C_depto (id, nome ,id_Regiao )


VALUES ( 200, 'Meu depto 2', 2);

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)

• Assim: a coluna id receberá o valor numérico 200,


a coluna nome receberá o valor alfanumérico 'Meu depto 2’ e
a coluna id_regiao receberá e valor 2.

Inserindo sem Referenciar as Colunas

Vamos analisar um outro comando INSERT, semelhante ao comando acima e que tem a seguinte sintaxe:

insert into schema.<nome tabela> values (valor1, valor2, ..., valorn);

Exemplo

INSERT INTO C_Depto VALUES (201, 'Meu Depto 3', 3);

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.

Implementação de Banco de Dados Professor Ventury 1


lnserindo com Valores Nulos

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:

INSERT INTO C_empr ( id, ult_nome, cargo)


VALUES ( 60, ‘Oliveira’, ‘Secretaria’);

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:

UPDATE [schema. ] nome_tabela


SET coluna1 = expressão I subquery [, colunan = ... ]
WHERE condição

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

Vejamos um exemplo que provoca um aumento de 50% em todos os salários da empresa.

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;

Implementação de Banco de Dados Professor Ventury 2


Atualização Múltipla

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

Para excluirmos linhas em uma tabela utilizamos o comando DELETE.

Veja a sintaxe do comando abaixo:

DELETE [FROM] [schema.]nome_tabela


WHERE condição

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

DELETE FROM C_NIVEL_SALARIAL;

Nota:
• Com este comando, todas as linha da tabela NIVEL SALARIAL foram removidas.

Você poderá verificar utilizando o comando SELECT.

SELECT * FROM C_NIVEL_SALARIAL;

Não ha linhas selecionadas.

Restringindo a Deleção

Para executar uma exclusão selecionada utilize a cláusula WHERE:

DELETE FROM C_NIVEL_SALARIAL


WHERE NIVEL <= 3;

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.

Implementação de Banco de Dados Professor Ventury 3


Subqueries em Comandos DML

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.

Subquery em INSERT (Inserindo Múltiplas Linhas)

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:

CREATE TABLE COPIA_DEPTO AS SELECT * FROM C_DEPTO WHERE 1 =2;

Para inserirmos agora na tabela criada todo o conteúdo da tabela c_depto daríamos o seguinte comando:

INSERT INTO COPIA_DEPTO (SELECT * FROM C_DEPTO);

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:

insert into copia_depto (select * from copia_depto);

• 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

SQL> UPDATE C_EMPR


2 SET ID_GERENTE = (SELECT ID_GERENTE
3 FROM C_EMPR
4 WHERE ID = 20)
5 WHERE CARGO = ‘Almoxarife’;

.
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’);

Implementação de Banco de Dados Professor Ventury 4


Transações

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.

Situação do dado depois do COMMIT.


• As modificações são concretizadas no banco de dados. O conteúdo anterior do dado é definitivamente
perdido.
• Todos os usuários podem ver os resultados da transação.
• Os bloqueios nas linhas afetadas são desfeitos; as linhas ficam disponíveis para que outros usuários
possam executar novas alterações.

Situação do dado depois do ROLLBACK.


• As mudanças são desfeitas. O conteúdo anterior do dado é restabelecido.
• Os bloqueios nas linhas afetadas são desfeitos; as linhas ficam disponíveis para que outros usuários
possam executar novas alterações.

Situações nas quais o COMMIT e o ROLLBACK são implícitos.


• Execução de um comando DDL, como um CREATE TABLE
o COMMIT automático
• Saída normal do SQL*Plus, sem que tenha sido explicitado COMMIT ou ROLLBACK

Implementação de Banco de Dados Professor Ventury 5


o COMMIT automático
• Término anormal do SQL*Plus ou queda do sistema
o ROLLBACK automático
• Recomendação: Sempre explicitar o COMMIT e o ROLLBACK

Acompanhe os exemplos:

INSERT INTO COPIA_DEPTO VALUES (71, 'TESTE1', 1);


INSERT INTO COPIA_DEPTO VALUES (72, 'TESTE2’, 2);
INSERT INTO COPIA_DEPTO VALUES (73, 'TESTE3', 3);

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.

• Podemos neste momento executar dois tipos de comando:


• Confirmar (COMMIT) a inclusão dos novos cursos, liberando a informação para as demais sessões e
usuários, ou
• Reverter (ROLLBACK) o comando, cancelando as inserções.

• Se executado um comando COMMIT explícito, ou outro que o contenha implicitamente, os comandos de


manipulação de dados que estejam pendentes serão confirmados e liberados para outras sessões / usuários.
Se executado um comando ROLLBACK, todas as operações pendentes serão desfeitas.

Exemplo

Observe que após o comando de rollback as linhas ‘sumiram da tabela’.

Implementação de Banco de Dados Professor Ventury 6


O Comando SAVEPOINT
Pode-se criar um ponto de salvamento dentro de uma transação corrente através do uso do comando
SAVEPOINT. Assim a transação é dividida em partes menores. Pode-se então descartar-se as alterações
pendentes até o ponto de salvamento especificado, através do uso do comando ROLLBACK TO SAVEPOINT.
Um savepoint marca um ponto intermediário no processamento de uma transação.
A sintaxe do comando é:
• SAVEPOINT nome do ponto de salvamento
• Marca um ponto de salvamento dentro da transação.
• ROLLBACK TO SAVEPOINT nome do ponto de salvamento
Exemplo

Nota:
Como conseqüência do último Commit, os dados das duas primeiras inserções foram salvos e apenas o último
insert foi desfeito.

Implementação de Banco de Dados Professor Ventury 7

Você também pode gostar