Você está na página 1de 39

9

Manipulação de Dados

Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Objetivos

Depois
Depois dede completar
completar esta
esta lição,
lição, você
você poderá
poderá
fazer
fazer oo seguinte
seguinte::
•• Descrever
Descrever cada
cada instrução
instrução DML
DML
•• Inserir
Inserir linhas
linhas em
em uma
uma tabela
tabela
•• Atualizar
Atualizar linhas
linhas em
em uma
uma tabela
tabela
•• Deletar
Deletar linhas
linhas de
de uma
uma tabela
tabela
•• Controlar
Controlar transações
transações

9-2 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


DML (Data Manipulation Language)

•• Uma
Uma instrução
instrução DML
DML éé executada
executada quando
quando
você:
você:
–– Adiciona
Adiciona novas
novas linhas
linhas aa uma
uma tabela
tabela
–– Modifica
Modifica linhas
linhas existentes
existentes em
em uma
uma
tabela
tabela
–– Remove
Remove linhas
linhas existentes
existentes de
de uma
uma tabela
tabela
•• Uma
Uma transação
transação consiste
consiste em
em um
um conjunto
conjunto
de
de instruções
instruções DML
DML que
que formam
formam uma
uma
unidade
unidade lógica
lógica de
de trabalho.
trabalho.

9-3 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Adicionando uma Nova Linha
em uma Tabela
50 DEVELOPMENT
50 DEVELOPMENT DETROIT
DETROIT
Nova linha
"… inserir uma nova linha
DEPT
na tabela DEPT…"
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK DEPT
20 RESEARCH DALLAS
30 SALES CHICAGO DEPTNO DNAME LOC
40 OPERATIONS BOSTON ------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 DEVELOPMENT DETROIT

9-4 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


A Instrução INSERT

•• Adicione
Adicione novas
novas linhas
linhas em
em uma
uma tabela
tabela
usando
usando aa instrução
instrução INSERT.
INSERT.

INSERT
INSERT INTO
INTO tabela
tabela [(coluna
[(coluna [,
[, coluna...])]
coluna...])]
VALUES
VALUES (valor
(valor [,
[, valor...]);
valor...]);

•• Somente
Somente uma
uma linha
linha éé inserida
inserida por
por vez
vez com
com
esta
esta sintaxe.
sintaxe.

9-5 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Inserindo Novas Linhas
•• Insira
Insira uma
uma nova
nova linha
linha contendo
contendo valores
valores
para
para cada
cada coluna.
coluna.
•• Liste
Liste valores
valores na
na ordem
ordem default
default das
das colunas
colunas
na
na tabela.
tabela.
•• Liste
Liste opcionalmente
opcionalmente asas colunas
colunas na
na
cláusula
cláusula INSERT.
INSERT.
SQL> INSERT INTO dept (deptno, dname, loc)
2 VALUES (50, 'DEVELOPMENT', 'DETROIT');
1 row created.

•• Coloque
Coloque os
os valores
valores de
de data
data ee caractere
caractere
entre
entre aspas
aspas simples.
simples.
9-6 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Inserindo Linhas com
Valores Nulos
•• Método
Método implícito:
implícito: Omita
Omita aa coluna
coluna da
da lista
lista
de
de colunas.
colunas.
SQL> INSERT INTO dept (deptno, dname )
2 VALUES (60, 'MIS');
1 row created.

•• Método
Método explícito:
explícito: Especifique
Especifique aa palavra-
palavra-
chave
chave NULL.
NULL.
SQL> INSERT INTO dept
2 VALUES (70, 'FINANCE', NULL);
1 row created.

9-7 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Inserindo Valores Especiais

A
A função
função SYSDATE
SYSDATE registra
registra aa data
data ee hora
hora atuais.
atuais.

SQL> INSERT INTO emp (empno, ename, job,


2 mgr, hiredate, sal, comm,
3 deptno)
4 VALUES (7196, 'GREEN', 'SALESMAN',
5 7782, SYSDATE, 2000, NULL,
6 10);
1 row created.

9-8 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Inserindo Valores
Específicos de Data
•• Adicionar
Adicionar um
um novo
novo funcionário.
funcionário.
SQL> INSERT INTO emp
2 VALUES (2296,'AROMANO','SALESMAN',7782,
3 TO_DATE('FEB 3, 1997', 'MON DD, YYYY'),
4 1300, NULL, 10);
1 row created.

•• Verifique
Verifique sua
sua adição.
adição.
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ------- -------- ---- --------- ---- ---- ------
2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10

9-9 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Inserindo Valores Usando
Variáveis de Substituição
Crie
Crie um
um script
script interativo
interativo usando
usando parâmetros
parâmetros
de
de substituição
substituição do
do SQL*Plus.
SQL*Plus.
SQL> INSERT INTO dept (deptno, dname, loc)
2 VALUES (&department_id,
3 '&department_name', '&location');

Enter value for department_id: 80


Enter value for department_name: EDUCATION
Enter value for location: ATLANTA

1 row created.

9-10 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Criando um Script
com Prompts Personalizados
•• ACCEPT
ACCEPT armazena
armazena oo valor
valor em
em uma
uma variável.
variável.
•• PROMPT
PROMPT exibe
exibe oo texto
texto personalizado.
personalizado.
ACCEPT department_id PROMPT 'Please enter the -
department number:'
ACCEPT department_name PROMPT 'Please enter -
the department name:'
ACCEPT location PROMPT 'Please enter the -
location:'
INSERT INTO dept (deptno, dname, loc)
VALUES (&department_id, '&department_name',
'&location');

9-11 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Copiando Linhas
a partir de Outra Tabela
•• Crie
Crie aa instrução
instrução INSERT
INSERT com
com uma
uma
subconsulta.
subconsulta.
SQL> INSERT INTO managers(id, name, salary, hiredate)
2 SELECT empno, ename, sal, hiredate
3 FROM emp
4 WHERE job = 'MANAGER';
3 rows created.

•• Não
Não use
use aa cláusula
cláusula VALUES.
VALUES.
•• Faça
Faça aa correspondência
correspondência dodo número
número dede
colunas
colunas na
na cláusula
cláusula INSERT
INSERT com
com oo número
número
de
de colunas
colunas nana subconsulta.
subconsulta.
9-12 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.
Alterando os Dados
EMP
em uma Tabela
EMPNO ENAME JOB ... DEPTNO "…atualize uma
7839 KING PRESIDENT 10 linha em uma
7698 BLAKE MANAGER 30 tabela EMP…"
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...

EMP
EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10


7698 BLAKE MANAGER 30
7782 CLARK MANAGER 20
10
7566 JONES MANAGER 20
...

9-13 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


A instrução UPDATE

•• Modifique
Modifique linhas
linhas existentes
existentes com
com aa
instrução
instrução UPDATE.
UPDATE.
UPDATE
UPDATE tabela
tabela
SET
SET coluna
coluna == valor
valor [,
[, coluna
coluna == valor,
valor, ...]
...]
[WHERE
[WHERE condição];
condição];

•• Atualize
Atualize mais
mais de
de uma
uma linha
linha por
por vez,
vez, se
se
necessário.
necessário.

9-14 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Atualizando Linhas em uma Tabela
•• Uma
Uma linha
linha ou
ou linhas
linhas específicas
específicas são
são
modificadas
modificadas quando
quando você
você especifica
especifica aa
cláusula
cláusula WHERE.
WHERE.
SQL> UPDATE emp
2 SET deptno = 20
3 WHERE empno = 7782;
1 row updated.

•• Todas
Todas as
as linhas
linhas na
na tabela
tabela são
são modificadas
modificadas
quando
quando você
você omite
omite aa cláusula
cláusula WHERE.
WHERE.
SQL>
SQL> UPDATE
UPDATE employee
employee
22 SET
SET deptno
deptno == 20;
20;
14
14 rows
rows updated.
updated.

9-15 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Atualizando com Subconsulta de
Várias Colunas
Atualize
Atualize oo cargo
cargo ee oo departamento
departamento dodo
funcionário
funcionário 7698
7698 para
para coincidir
coincidir com
com oo do
do
funcionário
funcionário 7499.
7499.
SQL> UPDATE emp
2 SET (job, deptno) =
3 (SELECT job, deptno
4 FROM emp
5 WHERE empno = 7499)
6 WHERE empno = 7698;
1 row updated.

9-16 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Atualizando Linhas Baseadas
em Outra Tabela
Use
Use subconsultas
subconsultas emem instruções
instruções UPDATE
UPDATE
para
para atualizar
atualizar linhas
linhas em
em uma
uma tabela
tabela baseada
baseada
em
em valores
valores de
de outra
outra tabela.
tabela.
SQL>
SQL> UPDATE
UPDATE employee
employee
22 SET
SET deptno
deptno == (SELECT
(SELECT deptno
deptno
33 FROM
FROM emp
emp
44 WHERE
WHERE empno
empno == 7788)
7788)
55 WHERE
WHERE job
job == (SELECT
(SELECT job
job
66 FROM
FROM emp
emp
77 WHERE
WHERE empno
empno == 7788);
7788);
22 rows
rows updated.
updated.

9-17 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Atualizando Linhas: Erro de
Restrição de Integridade
5555
too
t
n
een
aamm
SQL> UPDATE emp
SQL> UPDATE emp rrtt
p a
a
22 SET
SET deptno
deptno == 55 55 d
d eep
33 WHERE
WHERE deptno
deptno == 10; 10; ddee
o
eerro
úúmm
nn
e oo
s tte
ii s
UPDATE
UPDATE emp
emp eexx
** ããoo
ERROR
ERROR at
at line
line 1:
N
1: N
ORA-02291:
ORA-02291: integrity
integrity constraint
constraint (USR.EMP_DEPTNO_FK)
(USR.EMP_DEPTNO_FK)
violated
violated -- parent
parent key
key not
not found
found

9-18 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Removendo uma Linha de uma Tabela
DEPT
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
"… remova uma linha da
40 OPERATIONS BOSTON tabela DEPT…"
50 DEVELOPMENT DETROIT
60 MIS DEPT
...
DEPTNO DNAME LOC
------ ---------- --------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 MIS
...

9-19 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


A Instrução DELETE

Você
Você pode
pode remover
remover linhas
linhas existentes
existentes de
de uma
uma
tabela
tabela usando
usando aa instrução
instrução DELETE.
DELETE.

DELETE
DELETE [FROM]
[FROM] tabela
tabela
[WHERE
[WHERE condição];
condição];

9-20 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Deletando Linhas de uma Tabela

•• Linhas
Linhas específicas
específicas são
são deletadas
deletadas quando
quando
você
você especifica
especifica aa cláusula
cláusula WHERE.
WHERE.
SQL>
SQL> DELETE
DELETE FROM
FROM department
department
22 WHERE
WHERE dname
dname == 'DEVELOPMENT';
'DEVELOPMENT';
11 row
row deleted.
deleted.

•• Todas
Todas as
as linhas
linhas nana tabela
tabela serão
serão deletadas
deletadas
se
se você
você omitir
omitir aa cláusula
cláusula WHERE.
WHERE.
SQL>
SQL> DELETE
DELETE FROM
FROM department;
department;
44 rows
rows deleted.
deleted.

9-21 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Deletando Linhas Baseadas em
Outra Tabela
Use
Use subconsultas
subconsultas emem instruções
instruções DELETE
DELETE
para
para remover
remover linhas
linhas de
de uma
uma tabela
tabela baseadas
baseadas
em
em valores
valores de
de outra
outra tabela.
tabela.
SQL> DELETE FROM employee
2 WHERE deptno =
3 (SELECT deptno
4 FROM dept
5 WHERE dname ='SALES');
6 rows deleted.

9-22 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Deletando Linhas: Erro de
Restrição de Integridade

l iinnhhaa
SQL> DELETE
DELETE FROM dept mmaa l riiaa
SQL> FROM dept
t a r
r u
u i m
m áár
22 WHERE
WHERE deptno
deptno == 10; 10; deelleeta vee p prri
i rraa
e
e d aa v
cchh trraanngg ee i
p
p oodd aa
n
n ã
ã oo a uum
a m e eesst
o c
c êê e n
n hh h aa vve laa..
DELETE
DELETE FROM
FROM dept
VVo oonntte oo cch tabbeel
dept
u ee cc c oo m
m t rra
a ta
** qq u ddaa mc oouu t
ERROR uuss a
a eem
ERROR at
at line
line 1:
1:
ORA-02292:
ORA-02292: integrity
integrity constraint
constraint (USR.EMP_DEPTNO_FK)
(USR.EMP_DEPTNO_FK)
violated
violated -- child
child record
record found
found

9-23 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Transações de Banco de Dados

Consistem
Consistem de de uma
uma das
das seguintes
seguintes instruções:
instruções:
•• Instruções
Instruções DML
DML que
que fazem
fazem uma
uma alteração
alteração
consistente
consistente nos
nos dados
dados
•• Uma
Uma instrução
instrução DDL
DDL
•• Uma
Uma instrução
instrução DCL
DCL

9-24 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Transações de Banco de Dados

•• Começa
Começa quando
quando for
for executada
executada aa primeira
primeira
instrução
instrução SQL
SQL executável
executável
•• Termina
Termina com
com um
um dos
dos seguintes
seguintes eventos:
eventos:
–– COMMIT
COMMIT ou
ou ROLLBACK
ROLLBACK éé emitida
emitida
–– Instrução
Instrução DDL
DDL ou
ou DCL
DCL éé executada
executada
(commit
(commit automático)
automático)
–– O
O usuário
usuário sai
sai
–– O
O sistema
sistema cai
cai

9-25 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Vantagens das Instruções
COMMIT e ROLLBACK

•• Garantir
Garantir consistência
consistência dede dados
dados
•• Visualizar
Visualizar alterações
alterações nos
nos dados
dados antes
antes de
de
fazer
fazer as
as alterações
alterações permanentemente
permanentemente
•• Agrupar
Agrupar operações
operações relacionadas
relacionadas
logicamente
logicamente

9-26 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Controlando Transações
Transação
Transação

INSERT UPDATE INSERT DELETE

COMMIT Savepoint A Savepoint B

ROLLBACK para Savepoint B

ROLLBACK para Savepoint A

ROLLBACK

9-27 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Processando Transações Implícitas
•• Um
Um commit
commit automático
automático ocorre
ocorre sob
sob as
as
seguintes
seguintes circunstâncias:
circunstâncias:
–– A
A instrução
instrução DDL
DDL éé emitida
emitida
–– A
A instrução
instrução DCL
DCL éé emitida
emitida
–– A
A saída
saída normal
normal do
do SQL*Plus,
SQL*Plus, sem
sem emitir
emitir
explicitamente
explicitamente COMMIT
COMMIT ou ou ROLLBACK
ROLLBACK
•• Um
Um rollback
rollback automático
automático ocorre
ocorre quando
quando há

uma
uma finalização
finalização anormal
anormal dodo SQL*Plus/i
SQL*Plus/i
SQL*Plus
SQL*Plus ou ou queda
queda do
do sistema.
sistema.

9-28 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Estado dos Dados Antes de
COMMIT ou ROLLBACK
•• O
O estado
estado anterior
anterior dos
dos dados
dados pode
pode ser
ser
recuperado.
recuperado.
•• O
O usuário
usuário atual
atual pode
pode revisar
revisar os
os resultados
resultados das
das
operações
operações DMLDML usando
usando aa instrução
instrução SELECT.
SELECT.
•• Outros
Outros usuários
usuários não
não poderão
poderão verver os
os
resultados
resultados das
das instruções
instruções DML
DML dodo usuário
usuário
atual.
atual.
•• As
As linhas
linhas afetadas
afetadas são
são bloqueadas,
bloqueadas, outros
outros
usuários
usuários não
não poderão
poderão alterar
alterar os
os dados
dados dentro
dentro
das
das linhas
linhas afetadas.
afetadas.

9-29 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Estado dos Dados Após COMMIT
•• As
As alterações
alterações nos
nos dados
dados são
são feitas
feitas
permanentemente
permanentemente no no banco
banco de
de dados.
dados.
•• O
O estado
estado anterior
anterior dos
dos dados
dados éé perdido
perdido
permanentemente.
permanentemente.
•• Todos
Todos os
os usuários
usuários podem
podem ver
ver os
os resultados.
resultados.
•• As
As linhas
linhas afetadas
afetadas são
são desbloqueadas,
desbloqueadas, essas
essas
linhas
linhas estão
estão disponíveis
disponíveis para
para serem
serem
manipuladas
manipuladas porpor outros
outros usuários.
usuários.
•• Todos
Todos osos savepoints
savepoints são
são apagados.
apagados.

9-30 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Submetendo Dados a Commit

•• Fazer
Fazer as
as alterações.
alterações.
SQL>
SQL> UPDATE
UPDATE emp
emp
22 SET
SET deptno
deptno == 10
10
33 WHERE
WHERE empno
empno == 7782;
7782;
11 row
row updated.
updated.

•• Submeter
Submeter alterações
alterações aa commit.
commit.
SQL> COMMIT;
Commit complete.

9-31 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Estado dos Dados Após ROLLBACK
Descarte
Descarte todas
todas as
as alterações
alterações pendentes
pendentes
usando
usando aa instrução
instrução ROLLBACK.
ROLLBACK.
•• As
As alterações
alterações nos
nos dados
dados são
são desfeitas.
desfeitas.
•• O
O estado
estado anterior
anterior dos
dos dados
dados éé restaurado.
restaurado.
•• As
As linhas
linhas afetadas
afetadas são
são desbloqueadas.
desbloqueadas.

SQL> DELETE FROM employee;


14 rows deleted.
SQL> ROLLBACK;
Rollback complete.

9-32 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Fazendo Roll Back de Alterações
para um Marcador
•• Crie
Crie um
um marcador
marcador em
em uma
uma transação
transação atual
atual
usando
usando aa instrução
instrução SAVEPOINT.
SAVEPOINT.
•• Faça
Faça rollback
rollback do
do marcador
marcador usando
usando aa
instrução
instrução ROLLBACK
ROLLBACK TO TO SAVEPOINT.
SAVEPOINT.

SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.

9-33 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Rollback no Nível da Instrução

•• Se
Se uma
uma única
única instrução
instrução DMLDML falhar
falhar durante
durante
aa execução,
execução, será
será feito
feito rollback
rollback somente
somente
dessa
dessa instrução.
instrução.
•• OO Oracle
Oracle Server
Server implementa
implementa um um savepoint
savepoint
implícito.
implícito.
•• Todas
Todas as
as outras
outras alterações
alterações são
são mantidas.
mantidas.
•• O
O usuário
usuário deve
deve finalizar
finalizar as
as transações
transações
explicitamente
explicitamente usando
usando umauma instrução
instrução
COMMIT
COMMIT ou ou ROLLBACK.
ROLLBACK.

9-34 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Consistência na Leitura
•• A
A consistência
consistência na
na leitura
leitura garante
garante sempre
sempre
uma
uma exibição
exibição consistente
consistente dos
dos dados.
dados.
•• As
As alterações
alterações feitas
feitas por
por um
um usuário
usuário não
não
entram
entram em em conflito
conflito com
com asas alterações
alterações
feitas
feitas por
por outro
outro usuário.
usuário.
•• A
A consistência
consistência na
na leitura
leitura garante
garante que
que nos
nos
mesmos
mesmos dados:
dados:
–– Os
Os leitores
leitores não
não esperem
esperem pelos
pelos autores
autores
–– Os
Os autores
autores não
não esperem
esperem pelos
pelos leitores
leitores

9-35 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Implementação da Consistência
na Leitura
UPDATE emp Blocos
SET sal = 2000 de dados
WHERE ename =
'SCOTT';
Segmentos
de rollback
Usuário A
dados
SELECT * alterados
FROM emp; Imagem da e dados
consistência intactos
na leitura antes de
alterar dados
"antigos"
Usuário B

9-36 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Bloqueando
Bloqueios
Bloqueios do do Oracle:
Oracle:
•• Impedem
Impedem aa interação
interação destrutiva
destrutiva entre
entre
transações
transações simultâneas
simultâneas
•• Não
Não requerem
requerem ação
ação do
do usuário
usuário
•• Usam
Usam automaticamente
automaticamente oo nível
nível mais
mais baixo
baixo de
de
restrição
restrição
•• São
São mantidos
mantidos durante
durante aa duração
duração da
da transação
transação
•• Há
Há dois
dois modos
modos básicos:
básicos:
–– Exclusivo
Exclusivo
–– Compartilhado
Compartilhado

9-37 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Sumário

Instrução Descrição

INSERT Adiciona uma nova linha à tabela

UPDATE Modifica linhas existentes na tabela

DELETE Remove linhas existentes da tabela

COMMIT Torna permanente todas as alterações pendentes

SAVEPOINT Permite um rollback no marcador do savepoint

ROLLBACK Descarta todas as alterações nos dados pendentes

9-38 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.


Visão Geral do Exercício

• •Inserindo
Inserindolinhas
linhasnas
nastabelas
tabelas
• •Atualizando
Atualizando e deletandolinhas
e deletando linhasna
natabela
tabela
• •Controlando
Controlandotransações
transações

9-39 Copyright © Oracle Corporation, 1999. Todos os direitos reservados.

Você também pode gostar