Buscar

non-transferable license to use this Student Guide

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 298 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 298 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 298 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Oracle Database 11g: 
Fundamentos de SQL I
Guia do Aluno - Volume II
D49996BP11
Edição 1.1
Setembro 2009
D62554
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Copyright © 2009, Oracle. Todos os direitos reservados.
Isenção de Responsabilidade
Esta documentação contém informações proprietárias e é protegida pela legislação 
de direitos autorais e por outras leis de propriedade intelectual. A cópia e a 
impressão deste documento são permitidas exclusivamente para uso durante os 
cursos de treinamento da Oracle. O documento não poderá ser modificado de 
nenhuma forma. Salvo quando o uso estiver em conformidade com a lei de direitos 
autorais, é vedado usar, compartilhar, fazer download ou upload, copiar, imprimir, 
exibir, reproduzir, publicar, licenciar, divulgar, transmitir ou distribuir o presente 
documento, no todo ou em parte, sem a expressa autorização da Oracle.
As informações contidas neste documento estão sujeitas a alterações sem aviso 
prévio. Eventuais problemas encontrados no documento deverão ser reportados por 
escrito e enviados para: Oracle University, 500 Oracle Parkway, Redwood Shores, 
California 94065 EUA. Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda.
Av. Alfredo Egydio de Souza Aranha, 100, São Paulo, SP - 04726-170 – Brasil -
CNPJ: 59.456.277/0001-76. Este documento pode conter erros.
Aviso de Direitos Restritos
Caso o destinatário do presente documento seja o Governo dos Estados Unidos ou 
qualquer pessoa que esteja usando o documento em seu nome, será aplicado o 
seguinte aviso: 
DIREITOS DO GOVERNO DOS EUA

Os direitos do Governo dos EUA de usar, modificar, reproduzir, divulgar, exibir ou 
publicar estes materiais de treinamento são restritos pelas condições estabelecidas 
no contrato de licença da Oracle e/ou no contrato do Governo dos EUA aplicável. 
Aviso de Marca Registrada
Oracle é uma marca comercial registrada da Oracle Corporation e/ou de suas 
afiliadas. Outros nomes poderão constituir marcas comerciais de seus 
respectivos titulares.
Autores
Puja Singh
Brian Pottle
Revisores e 
Colaboradores Técnicos
Claire Bennett
Tom Best
Purjanti Chang
Ken Cooper
László Czinkóczki
Burt Demchick
Mark Fleming
Gerlinde Frenzen
Nancy Greenberg
Chaitanya Koratamaddi
Wendy Lo
Timothy Mcglue
Alan Paulson
Bryan Roberts
Abhishek Singh
Lori Tritz
Michael Versaci
Lex van der Werff
Redatores
Raj Kumar
Amitha Narayan
Vijayalakshmi Narasimhan
Designer Gráfico
Satish Bettegowda
Editores
Sujatha Nagendra
Syed Ali
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 iii
Sumário 
 
 
 
 
Prefácio 
 
I Introdução 
Objetivos da Lição I-2 
Agenda da Lição I-3 
Objetivos do Curso I-4 
Agenda do Curso I-5 
Apêndices Usados no Curso I-7 
Agenda da Lição I-8 
Oracle Database 11g: Áreas de Foco I-9 
Oracle Database 11g I-10 
Oracle Fusion Middleware I-12 
Oracle Enterprise Manager Grid Control 10g I-13 
Oracle BI Publisher I-14 
Agenda da Lição I-15 
Sistemas de Gerenciamento de Banco de Dados Relacional e de Banco de Dados 
Relacional de Objeto I-16 
Armazenamento de Dados em Diferentes Mídias I-17 
Conceito de Banco de Dados Relacional I-18 
Definição de um Banco de Dados Relacional I-19 
Modelos de Dados I-20 
Modelo de Relacionamento entre Entidades I-21 
Convenções de Modelagem de Relacionamento entre Entidades I-23 
Relacionando Várias Tabelas I-25 
Terminologia do Banco de Dados Relacional I-27 
Agenda da Lição I-29 
Usando SQL para Consultar Seu Banco de Dados I-30 
Instruções SQL I-31 
Ambientes de Desenvolvimento para SQL I-32 
Agenda da Lição I-33 
Esquema HR (Human Resources) I-34 
Tabelas Usadas no Curso I-35 
Agenda da Lição I-36 
Documentação do Oracle Database 11g I-37 
Recursos Adicionais I-38 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 iv
 
Resumo I-39 
Exercício I: Visão Geral I-40 
 
1 Recuperando Dados com a Instrução SQL SELECT 
Objetivos 1-2 
Agenda da Lição 1-3 
Recursos de Instruções SQL SELECT 1-4 
Instrução SELECT Básica 1-5 
Selecionando Todas as Colunas 1-6 
Selecionando Colunas Específicas 1-7 
Criando Instruções SQL 1-8 
Defaults de Cabeçalhos de Colunas 1-9 
Agenda da Lição 1-10 
Expressões Aritméticas 1-11 
Usando Operadores Aritméticos 1-12 
Precedência de Operadores 1-13 
Definindo um Valor Nulo 1-14 
Valores Nulos em Expressões Aritméticas 1-15 
Agenda da Lição 1-16 
Definindo um Apelido de Coluna 1-17 
Usando Apelidos de Colunas 1-18 
Agenda da Lição 1-19 
Operador de Concatenação 1-20 
Strings de Caracteres Literais 1-21 
Usando Strings de Caracteres Literais 1-22 
Operador de Aspas (q) Alternativo 1-23 
Linhas Duplicadas 1-24 
Agenda da Lição 1-25 
Exibindo a Estrutura de Tabelas 1-26 
Usando o Comando DESCRIBE 1-27 
Questionário 1-28 
Resumo 1-29 
Exercício 1: Visão Geral 1-30 
 
2 Restringindo e Classificando Dados 
Objetivos 2-2 
Agenda da Lição 2-3 
Limitando Linhas com uma Seleção 2-4 
Limitando as Linhas Selecionadas 2-5 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 v
Usando a Cláusula WHERE 2-6 
Strings de Caracteres e Datas 2-7 
Operadores de Comparação 2-8 
Usando Operadores de Comparação 2-9 
Condições de Intervalo Usando o Operador BETWEEN 2-10 
Condição de Associação Usando o Operador IN 2-11 
Correspondência de Padrões Usando o Operador LIKE 2-12 
Combinando Caracteres Curinga 2-13 
Usando as Condições NULL 2-14 
Definindo Condições Usando os Operadores Lógicos 2-15 
Usando o Operador AND 2-16 
Usando o Operador OR 2-17 
Usando o Operador NOT 2-18 
Agenda da Lição 2-19 
Regras de Precedência 2-20 
Agenda da Lição 2-22 
Usando a Cláusula ORDER BY 2-23 
Classificação 2-24 
Agenda da Lição 2-26 
Variáveis de Substituição 2-27 
Usando a Variável de Substituição E Comercial Simples 2-29 
Valores de Caractere e Data com Variáveis de Substituição 2-31 
Especificando Nomes de Colunas, Expressões e Texto 2-32 
Usando a Variável de Substituição E Comercial Duplo 2-33 
Agenda da Lição 2-34 
Usando o Comando DEFINE 2-35 
Usando o Comando VERIFY 2-36 
Questionário 2-37 
Resumo 2-38 
Exercício 2: Visão Geral 2-39 
 
3 Usando Funções de Linha Única para Personalizar o Resultado 
Objetivos 3-2 
Agenda da Lição 3-3 
Funções SQL 3-4 
Dois Tipos de Funções SQL 3-5 
Funções de Linha Única 3-6 
Agenda da Lição 3-8 
Funções de Caractere 3-9 
Funções de Conversão de Capitalização 3-11 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tion 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 vi
Usando Funções de Conversão de Capitalização 3-12 
Funções de Manipulação de Caracteres 3-13 
Usando as Funções de Manipulação de Caracteres 3-14 
Agenda da Lição 3-15 
Funções de Número 3-16 
Usando a Função ROUND 3-17 
Usando a Função TRUNC 3-18 
Usando a Função MOD 3-19 
Agenda da Lição 3-20 
Trabalhando com Datas 3-21 
Formato de Data RR 3-22 
Usando a Função SYSDATE 3-24 
Aritmética com Datas 3-25 
Usando Operadores Aritméticos com Datas 3-26 
Agenda da Lição 3-27 
Funções de Manipulação de Datas 3-28 
Usando Funções de Data 3-29 
Usando as Funções ROUND e TRUNC com Datas 3-30 
Questionário 3-31 
Resumo 3-32 
Exercício 3: Visão Geral 3-33 
 
4 Usando Funções de Conversão e Expressões Condicionais 
Objetivos 4-2 
Agenda da Lição 4-3 
Funções de Conversão 4-4 
Conversão Implícita de Tipos de Dados 4-5 
Conversão Explícita de Tipos de Dados 4-7 
Agenda da Lição 4-10 
Usando a Função TO_CHAR com Datas 4-11 
Elementos do Modelo de Formato de Data 4-12 
Usando a Função TO_CHAR com Datas 4-16 
Usando a Função TO_CHAR com Números 4-17 
Usando as Funções TO_NUMBER e TO_DATE 4-20 
Usando as Funções TO_CHAR e TO_DATE com o Formato de Data RR 4-22 
Agenda da Lição 4-23 
Aninhando Funções 4-24 
Agenda da Lição 4-26 
Funções Gerais 4-27 
Função NVL 4-28 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 vii
Usando a Função NVL 4-29 
Usando a Função NVL2 4-30 
Usando a Função NULLIF 4-31 
Usando a Função COALESCE 4-32 
Agenda da Lição 4-35 
Expressões Condicionais 4-36 
Expressão CASE 4-37 
Usando a Expressão CASE 4-38 
Função DECODE 4-39 
Usando a Função DECODE 4-40 
Questionário 4-42 
Resumo 4-43 
Exercício 4: Visão Geral 4-44 
 
5 Gerando Relatórios de Dados Agregados Usando as Funções de Grupo 
Objetivos 5-2 
Agenda da Lição 5-3 
O Que São Funções de Grupo? 5-4 
Tipos de Funções de Grupo 5-5 
Funções de Grupo: Sintaxe 5-6 
Usando as Funções AVG e SUM 5-7 
Usando as Funções MIN e MAX 5-8 
Usando a Função COUNT 5-9 
Usando a Palavra-Chave DISTINCT 5-10 
Funções de Grupo e Valores Nulos 5-11 
Agenda da Lição 5-12 
Criando Grupos de Dados 5-13 
Criando Grupos de Dados: Sintaxe da Cláusula GROUP BY 5-14 
Usando a Cláusula GROUP BY 5-15 
Agrupando por Mais de Uma Coluna 5-17 
Usando a Cláusula GROUP BY em Várias Colunas 5-18 
Consultas Inválidas Usando Funções de Grupo 5-19 
Restringindo Resultados de Grupos 5-21 
Restringindo Resultados de Grupos com a Cláusula HAVING 5-22 
Usando a Cláusula HAVING 5-23 
Agenda da Lição 5-25 
Aninhando Funções de Grupo 5-26 
Questionário 5-27 
Resumo 5-28 
Exercício 5: Visão Geral 5-29 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 viii
 
6 Exibindo Dados de Várias Tabelas 
Objetivos 6-2 
Agenda da Lição 6-3 
Obtendo Dados de Várias Tabelas 6-4 
Tipos de Junção 6-5 
Unindo Tabelas com a Sintaxe SQL:1999 6-6 
Qualificando Nomes de Colunas Ambíguos 6-7 
Agenda da Lição 6-8 
Criando Junções Naturais 6-9 
Recuperando Registros com Junções Naturais 6-10 
Criando Junções com a Cláusula USING 6-11 
Unindo Nomes de Colunas 6-12 
Recuperando Registros com a Cláusula USING 6-13 
Usando Apelidos de Tabela com a Cláusula USING 6-14 
Criando Junções com a Cláusula ON 6-15 
Recuperando Registros com a Cláusula ON 6-16 
Criando Junções Tridimensionais com a Cláusula ON 6-17 
Aplicando Outras Condições a uma Junção 6-18 
Agenda da Lição 6-19 
Unindo uma Tabela a Ela Mesma 6-20 
Auto-Junções Usando a Cláusula ON 6-21 
Agenda da Lição 6-22 
Não-equijunções 6-23 
Recuperando Registros com Não-equijunções 6-24 
Agenda da Lição 6-25 
Retornando Registros sem Correspondência Direta Usando Junções OUTER 6-26 
Junções INNER e OUTER 6-27 
Junção LEFT OUTER 6-28 
Junção RIGHT OUTER 6-29 
Junção FULL OUTER 6-30 
Agenda da Lição 6-31 
Produtos Cartesianos 6-32 
Gerando um Produto Cartesiano 6-33 
Criando Junções Cruzadas 6-34 
Questionário 6-35 
Resumo 6-36 
Exercício 6: Visão Geral 6-37 
 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 ix
 
7 Usando Subconsultas para Solucionar Consultas 
Objetivos 7-2 
Agenda da Lição 7-3 
Usando uma Subconsulta para Solucionar um Problema 7-4 
Sintaxe da Subconsulta 7-5 
Usando uma Subconsulta 7-6 
Diretrizes de Uso de Subconsultas 7-7 
Tipos de Subconsultas 7-8 
Agenda da Lição 7-9 
Subconsultas de Linha Única 7-10 
Executando Subconsultas de Linha Única 7-11 
Usando Funções de Grupo em uma Subconsulta 7-12 
A Cláusula HAVING com Subconsultas 7-13 
O Que Está Errado com Esta Instrução? 7-14 
Nenhuma Linha Retornada pela Consulta Interna 7-15 
Agenda da Lição 7-16 
Subconsultas de Várias Linhas 7-17 
Usando o Operador ANY em Subconsultas de Várias Linhas 7-18 
Usando o Operador ALL em Subconsultas de Várias Linhas 7-19 
Agenda da Lição 7-20 
Valores Nulos em uma Subconsulta 7-21 
Questionário 7-23 
Resumo 7-24 
Exercício 7: Visão Geral 7-25 
 
8 Usando os Operadores de Conjunto 
Objetivos 8-2 
Agenda da Lição 8-3 
Operadores de Conjunto 8-4 
Diretrizes de Operadores de Conjunto 8-5 
O Servidor Oracle e os Operadores de Conjunto 8-6 
Agenda da Lição 8-7 
Tabelas Usadas Nesta Lição 8-8 
Agenda da Lição 8-12 
Operador UNION 8-13 
Usando o Operador UNION 8-14 
Operador UNION ALL 8-16 
Usando o Operador UNION ALL 8-17 
Agenda da Lição 8-18 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 x
Operador INTERSECT 8-19 
Usando o Operador INTERSECT 8-20 
Agenda da Lição 8-21 
Operador MINUS 8-22 
Usando o Operador MINUS 8-23 
Agenda da Lição 8-24 
Correspondência entre Instruções SELECT 8-25 
Correspondência entre Instruções SELECT: Exemplo 8-26 
Agenda da Lição 8-27 
Usando a Cláusula ORDER BY em Operações Set 8-28 
Questionário 8-29 
Resumo 8-30 
Exercício 8: Visão Geral 8-31 
 
9 Manipulando Dados 
Objetivos 9-2 
Agenda da Lição 9-3 
DML (Data Manipulation Language) 9-4 
Adicionando uma Nova Linha a uma Tabela 9-5 
Sintaxe da Instrução INSERT 9-6 
Inserindo Novas Linhas 9-7 
Inserindo Linhas com Valores Nulos 9-8 
Inserindo Valores Especiais 9-9 
Inserindo Valores de Data e Hora Específicos 9-10 
Criando um Script 9-11 
Copiando Linhas de Outra Tabela 9-12 
Agenda da Lição 9-13 
Alterando Dados de uma Tabela 9-14 
Sintaxe da Instrução UPDATE 9-15 
Atualizando Linhas de uma Tabela 9-16 
Atualizando Duas Colunas com uma Subconsulta9-17 
Atualizando Linhas com Base em Outra Tabela 9-18 
Agenda da Lição 9-19 
Removendo uma Linha de uma Tabela 9-20 
Instrução DELETE 9-21 
Deletando Linhas de uma Tabela 9-22 
Deletando Linhas com Base em Outra Tabela 9-23 
Instrução TRUNCATE 9-24 
Agenda da Lição 9-25 
Transações de Banco de Dados 9-26 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 xi
Transações do Banco de Dados: Iniciar e Terminar 9-27 
Vantagens das Instruções COMMIT e ROLLBACK 9-28 
Instruções de Controle Explícito de Transações 9-29 
Fazendo Rollback de Alterações até um Marcador 9-30 
Processamento de Transação Implícita 9-31 
Estado dos Dados Antes de COMMIT ou ROLLBACK 9-33 
Estado dos Dados Após COMMIT 9-34 
Commit de Dados 9-35 
Estado dos Dados Após ROLLBACK 9-36 
Estado dos Dados Após ROLLBACK: Exemplo 9-37 
Rollback no Nível de Instrução 9-38 
Agenda da Lição 9-39 
Consistência de Leitura 9-40 
Implementando a Consistência de Leitura 9-41 
Agenda da Lição 9-42 
Cláusula FOR UPDATE em uma Instrução SELECT 9-43 
Cláusula FOR UPDATE: Exemplos 9-44 
Questionário 9-46 
Resumo 9-47 
Exercício 9: Visão Geral 9-48 
 
10 Usando Instruções DDL para Criar e Gerenciar Tabelas 
Objetivos 10-2 
Agenda da Lição 10-3 
Objetos de Banco de Dados 10-4 
Regras de Nomeação 10-5 
Agenda da Lição 10-6 
Instrução CREATE TABLE 10-7 
Fazendo Referência a Tabelas de Outro Usuário 10-8 
Opção DEFAULT 10-9 
Criando Tabelas 10-10 
Agenda da Lição 10-11 
Tipos de Dados 10-12 
Tipos de Dados de Data/Hora 10-14 
Agenda da Lição 10-15 
Incluindo Constraints 10-16 
Diretrizes de Constraints 10-17 
Definindo Constraints 10-18 
Constraint NOT NULL 10-20 
Constraint UNIQUE 10-21 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 xii
Constraint PRIMARY KEY 10-23 
Constraint FOREIGN KEY 10-24 
Constraint FOREIGN KEY: Palavras-Chave 10-26 
Constraint CHECK 10-27 
CREATE TABLE: Exemplo 10-28 
Violando Constraints 10-29 
Agenda da Lição 10-31 
Criando uma Tabela com uma Subconsulta 10-32 
Agenda da Lição 10-34 
Instrução ALTER TABLE 10-35 
Tabelas Somente para Leitura 10-36 
Agenda da Lição 10-37 
Eliminando uma Tabela 10-38 
Questionário 10-39 
Resumo 10-40 
Exercício 10: Visão Geral 10-41 
 
11 Criando Outros Objetos de Esquema 
Objetivos 11-2 
Agenda da Lição 11-3 
Objetos de Banco de Dados 11-4 
O Que É uma View? 11-5 
Vantagens das Views 11-6 
Views Simples e Complexas 11-7 
Criando uma View 11-8 
Recuperando Dados de uma View 11-11 
Modificando uma View 11-12 
Criando uma View Complexa 11-13 
Regras para Executar Operações DML em uma View 11-14 
Usando a Cláusula WITH CHECK OPTION 11-17 
Negando Operações DML 11-18 
Removendo uma View 11-20 
Exercício 11: Visão Geral da Parte 1 11-21 
Agenda da Lição 11-22 
Sequências 11-23 
Instrução CREATE SEQUENCE: Sintaxe 11-25 
Criando uma Sequência 11-26 
Pseudocolunas NEXTVAL e CURRVAL 11-27 
Usando uma Sequência 11-29 
Armazenando Valores de Sequência em Cache 11-30 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 xiii
Modificando uma Sequência 11-31 
Diretrizes para Modificar uma Sequência 11-32 
Agenda da Lição 11-33 
Índices 11-34 
Como São Criados os Índices? 11-36 
Criando um Índice 11-37 
Diretrizes para Criar Índices 11-38 
Removendo um Índice 11-39 
Agenda da Lição 11-40 
Sinônimos 11-41 
Criando um Sinônimo para um Objeto 11-42 
Criando e Removendo Sinônimos 11-43 
Questionário 11-44 
Resumo 11-45 
Exercício 11: Visão Geral da Parte 2 11-46 
 
Apêndice A: Soluções dos Exercícios 
 
Apêndice B: Descrições das Tabelas 
 
Apêndice C: Sintaxe da Junção do Oracle 
Objetivos C-2 
Obtendo Dados de Várias Tabelas C-3 
Produtos Cartesianos C-4 
Gerando um Produto Cartesiano C-5 
Tipos de Junção Proprietária da Oracle C-6 
Unindo Tabelas Usando a Sintaxe Oracle C-7 
Qualificando Nomes de Coluna Ambíguos C-8 
Equijunções C-9 
Recuperando Registros com Equijunções C-10 
Recuperando Registros com Equijunções: Exemplo C-11 
Condições Adicionais de Pesquisa Usando o Operador AND C-12 
Unindo Mais de Duas Tabelas C-13 
Não-equijunções C-14 
Recuperando Registros com Não-equijunções C-15 
Retornando Registros sem Correspondência Direta com Junções Externas C-16 
Junções Externas: Sintaxe C-17 
Usando Junções Externas C-18 
Junção Externa: Outro Exemplo C-19 
Unindo uma Tabela a Ela Mesma C-20 
Auto-Junção: Exemplo C-21 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 xiv
 
Resumo C-22 
Exercício C: Visão Geral C-23 
 
Apêndice D: Usando o SQL*Plus 
Objetivos D-2 
Interação Entre o SQL e o SQL*Plus D-3 
Instruções SQL e Comandos do SQL*Plus D-4 
Visão Geral do SQL*Plus D-5 
Efetuando Login no SQL*Plus D-6 
Exibindo a Estrutura de Tabelas D-8 
Comandos de Edição do SQL*Plus D-10 
Usando LIST, n e APPEND D-12 
Usando o Comando CHANGE D-13 
Comandos de Edição do SQL*Plus D-14 
Usando os Comandos SAVE, START e EDIT D-15 
Comando SERVEROUTPUT D-17 
Usando o Comando SPOOL do SQL*Plus D-18 
Usando o Comando AUTOTRACE D-19 
Resumo D-20 
 
Apêndice E: Usando o SQL Developer 
Objetivos E-2 
O Que É o Oracle SQL Developer? E-3 
Especificações do SQL Developer E-4 
Instalando o SQL Developer E-5 
Interface do SQL Developer 1.2 E-6 
Criando uma Conexão com um Banco de Dados -E-7 
Procurando Objetos do Banco de Dados E-10 
Criando um Objeto de Esquema E-11 
Criando uma Nova Tabela: Exemplo E-12 
Usando a Planilha do SQL E-13 
Executando Instruções SQL E-16 
Salvando Scripts SQL E-17 
Executando Arquivos de Script Salvos: Método 1 E-18 
Executando Arquivos de Script Salvos: Método 2 E-19 
Executando Instruções SQL E-20 
Formatando o Código SQL E-21 
Usando Snippets E-22 
Usando Snippets: Exemplo E-23 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 xv
Usando SQL*Plus E-24 
Depurando Procedimentos e Funções E-25 
Gerando Relatórios de Banco de Dados E-26 
Criando um Relatório Definido pelo Usuário E-27 
Mecanismos de Pesquisa e Ferramentas Externas E-28 
Definindo Preferências E-29 
Especificações do SQL Developer 1.5.3 E-30 
Instalando o SQL Developer 1.5.3 E-31 
Interface do SQL Developer 1.5.3 E-32 
Resumo E-34 
 
Índice 
 
Exercícios AdicionaisExercícios Adicionais: Soluções 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Copyright © 2009, Oracle. Todos os direitos reservados.
Manipulando dados
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 2
Copyright © 2009, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lição, você será capaz de:
• Descrever cada instrução DML (Data Manipulation
Language)
• Inserir linhas em uma tabela
• Atualizar linhas em uma tabela
• Excluir linhas de uma tabela
• Controlar transações
Objetivo
Nesta lição, você aprenderá a usar as instruções DML (Data Manipulation Language) para inserir 
linhas em uma tabela, atualizar linhas existentes em uma tabela e excluir linhas existentes de uma 
tabela. Além disso, aprenderá a controlar transações com as instruções COMMIT, SAVEPOINT e 
ROLLBACK.Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 3
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELETE
– Instrução TRUNCATE
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 4
Copyright © 2009, Oracle. Todos os direitos reservados.
Data Manipulation Language
• Uma instrução DML é executada quando você:
– Adiciona novas linhas a uma tabela
– Modifica linhas existentes em uma tabela
– Remove linhas existentes de uma tabela
• Uma transação é composta por uma coleção de instruções 
DML que formam uma unidade lógica de trabalho.
Data Manipulation Language
A DML (Data Manipulation Language) é uma parte importante da SQL. Ao adicionar, atualizar ou 
excluir dados no banco de dados, você executa uma instrução DML. Uma coleção das instruções 
DML que formam uma unidade lógica de trabalho é denominada transação. 
Considere um banco de dados de uma instituição bancária. Quando um cliente do banco transfere 
dinheiro de uma conta de poupança para uma conta corrente, a transação pode incluir três operações 
separadas: diminuir a conta de poupança, aumentar a conta corrente e registrar a transação no extrato. 
O Oracle Server deve garantir que todas as três instruções SQL sejam executadas para manter as 
contas com o saldo devido. Quando algo impede a execução de uma das instruções na transações, as 
outras instruções da transação devem ser desfeitas.
Observação
• A maioria das instruções DML nesta lição pressupõe que nenhuma restrição na tabela seja 
violada. As restrições serão discutidas mais tarde neste curso. 
• No SQL Developer, clique no ícone Executar Script ou pressione [F5] para executar as 
instruções DML. As mensagens de feedback serão mostradas na página com a tab Saída de 
Script.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 5
Copyright © 2009, Oracle. Todos os direitos reservados.
Adicionando uma nova linha a uma tabela
DEPARTMENTS 
Nova 
linha
Inserção de uma nova 
linha na tabela
DEPARTMENTS.
Adicionando uma nova linha a uma tabela
O gráfico no slide ilustra a adição de um novo departamento à tabela DEPARTMENTS.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 6
Copyright © 2009, Oracle. Todos os direitos reservados.
Sintaxe da instrução INSERT
• Adicione novas linhas a uma tabela usando a instrução 
INSERT:
• Com essa sintaxe, é inserida apenas uma linha por vez.
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
Sintaxe da instrução INSERT
É possível adicionar novas linhas a uma tabela emitindo a instrução INSERT. 
Na sintaxe:
table é o nome da tabela
column é o nome da coluna na tabela a ser preenchida
value é o valor correspondente da coluna
Observação: essa instrução com a cláusula VALUES adiciona apenas uma linha a uma tabela por 
vez.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 7
Copyright © 2009, Oracle. Todos os direitos reservados.
Inserindo novas linhas
• Insira uma nova linha contendo os valores de cada coluna.
• Liste os valores na ordem padrão das colunas na tabela.
• Opcionalmente, liste as colunas na cláusula INSERT.
• Encerre os caracteres e valores de dados entre aspas 
simples.
INSERT INTO departments(department_id, 
department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
Inserindo novas linhas
Como é possível inserir uma nova linha contendo os valores de cada coluna, a lista de colunas não é
necessária na cláusula INSERT. Contudo, se você não usar a lista de colunas, os valores deverão ser 
listados de acordo com o pedido padrão das colunas na tabela, e um valor deverá ser fornecido para 
cada coluna. 
DESCRIBE departments
Para fins de clareza, use a lista de colunas na cláusula INSERT.
Encerre os caracteres e valores de data entre aspas simples; no entanto, não é recomendado encerrar 
os valores numéricos entre aspas simples. 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
comฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 8
Copyright © 2009, Oracle. Todos os direitos reservados.
• Método implícito: omitir a coluna da 
lista de colunas.
• Método explícito: especificar a palavra-chave NULL na 
cláusula VALUES.
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
INSERT INTO departments (department_id, 
department_name)
VALUES (30, 'Purchasing');
Inserindo linhas com valores nulos
Inserindo linhas com valores nulos
Não se esqueça de usar valores nulos na coluna de destino verificando o status Null com o comando 
DESCRIBE.
O Oracle Server impõe automaticamente todos os tipos e intervalos de dados, e as restrições da 
integridade de dados. Qualquer coluna que não esteja listada explicitamente obterá um valor nulo na 
nova linha. 
Os erros comuns que podem ocorrer durante a entrada do usuário são verificados na seguinte ordem: 
• O valor obrigatório está faltando em uma coluna NOT NULL
• Duplique o valor que viole qualquer restrição de chave principal ou exclusiva
• Qualquer valor que viole uma restrição CHECK
• Integridade referencial mantida pela restrição de chave estrangeira 
• Tipo de dados imcompatível ou valores muito grandes para preencher a coluna
Observação: o uso da lista de colunas é recomendado, pois torna a instrução INSERT mais legível e 
confiável, ou menos suscetível a erros.
Método Descrição 
Implícito Omita a coluna da lista de colunas. 
Explícito Especifique a palavra-chave NULL na lista VALUES; 
especifique a string vazia ('') na lista VALUES para strings de 
caracteres e datas. 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 9
Copyright © 2009, Oracle. Todos os direitos reservados.
INSERT INTO employees (employee_id, 
first_name, last_name, 
email, phone_number,
hire_date, job_id, salary, 
commission_pct, manager_id,
department_id)
VALUES (113, 
'Louis', 'Popp', 
'LPOPP', '515.124.4567', 
SYSDATE, 'AC_ACCOUNT', 6900, 
NULL, 205, 110);
Inserindo valores especiais
A função SYSDATE registra a data e o horário atuais.
Inserindo valores especiais
É possível usar funções para inserir valores especiais na sua tabela. 
O exemplo do slide grava as informações do funcionário Popp na tabela EMPLOYEES. Ele fornece a 
data e o horário atuais na coluna HIRE_DATE. Ele usa a função SYSDATE que retorna a data e o 
horário atuais do servidor de banco de dados. Além disso, usa a função CURRENT_DATE para obter 
a data atual no fuso horário da sessão. Também é possível usar a função USER ao inserir linhas em 
uma tabela. A função USER grava o nome do usuário atual.
Confirmando inclusões na tabela
SELECT employee_id, last_name, job_id, hire_date, commission_pct
FROM employees
WHERE employee_id = 113;
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 10
Copyright © 2009, Oracle. Todos os direitos reservados.
Inserindo valores de data e horário específicos
• Adicione um novo funcionário.
• Verifique sua inclusão.
INSERT INTO employees
VALUES (114, 
'Den', 'Raphealy', 
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);
Inserindo valores de data e horário específicos
O formato DD-MON-RR normalmente é usado para inserir um valor de data. Com o formato RR, o 
sistema fornece o século correto automaticamente.
Também é possível fornecer o valor da data no formato DD-MON-YYYY. Isso é recomendado 
porque ele especifica claramente o século e não depende da lógica interna do formato RR para 
especificar o século correto.
Se for necessário inserir uma data em outro formato e não no formato padrão (por exemplo, com 
outro século ou com uma hora específica), use a função TO_DATE.
O exemplo no slide registra as informações do funcionário Raphealy na tabela EMPLOYEES. Define 
a coluna HIRE_DATE como 3 de fevereiro de 1999. 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 11
Copyright © 2009, Oracle. Todos os direitos reservados.
INSERT INTO departments 
(department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);
Criando um script 
• Use a substituição & em uma instrução SQL para solicitar 
valores.
• & é um marcador de espaço para o valor da variável.
Criando um script
É possível salvar comandos com variáveis de substituição em um arquivo e executá-los no arquivo. 
O exemplo no slide registra as informações de um departamento na tabela DEPARTMENTS. 
Execute o arquivo do script e você receberá um prompt para inserção de cada variável de substituição 
de E comercial (&). Depois de inserir um valor para a variável de substituição, clique no botão OK. 
Os valores inseridos serão substituídos na instrução. Isso permitirá executar o mesmo arquivo de 
script continuamente, mas fornecerá um conjunto de valores diferente em cada execução.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 12
Copyright © 2009, Oracle. Todos os direitos reservados.
Copiando linhas de outra tabela
• Escreva a instrução INSERT com uma subconsulta:
• Não use a cláusula VALUES.
• O número de colunas na cláusula INSERT deve ser 
correspondente às colunas na subconsulta.
• Insira todas as linhas retornadas pela subconsulta na 
tabela sales_reps.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
Copiando linhas de outra tabela
É possível usar a instrução INSERT para adicionar linhas a uma tabela em que os valores sejam 
derivados de tabelas existentes. No exemplo de slide, para que a instrução INSERT INTO funcione, 
a tabela sales_reps deve ter sido criada anteriormente usando a instrução CREATE TABLE. 
CREATE TABLE é discutido na lição seguinte entitulada “Uso das instruções DDL para criar e 
gerenciar tabelas”. 
Em substituição da cláusula VALUES, use uma subconsulta. 
Sintaxe
INSERT INTO table [ column (, column) ] subquery;
Na sintaxe:
table é o nome da tabela
column é o nome da coluna na tabela a ser preenchida
subquery é a subconsulta que retorna linhas para a tabela
O número de colunas e tipos de dados na lista de colunas da cláusula INSERT deve ser 
correspondente em número de valores e tipos de dados na subconsulta. Zero ou mais linhas são 
adicionadasdependendo do número de linhas retornado pela subconsulta. Para criar uma cópia das 
linhas de uma tabela, use SELECT * na subconsulta:
INSERT INTO copy_emp
SELECT * 
FROM employees;
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 13
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELETE
– Instrução TRUNCATE
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 14
Copyright © 2009, Oracle. Todos os direitos reservados.
Alterando dados em uma tabela
EMPLOYEES
Atualize as linhas na tabela EMPLOYEES:
Alterando dados em uma tabela
O slide ilustra a alteração no número do departamento dos funcionários no departamento 60 para o 
departamento 80.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 15
Copyright © 2009, Oracle. Todos os direitos reservados.
Sintaxe da instrução UPDATE
• Modifique os valores existentes em uma tabela com a 
instrução UPDATE:
• Atualize mais de uma linha por vez (se necessário).
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
Sintaxe da instrução UPDATE
É possível modificar os valores existentes em uma tabela usando a instrução UPDATE.
Na sintaxe:
table é o nome da tabela
column é o nome da coluna na tabela a ser preenchida
value é o valor ou a subconsulta correspondente para a coluna
condition identifica as linhas a serem atualizadas e é composta de nomes de colunas, 
expressões, constantes, subconsultas e operadores de comparação
Confirme a operação de atualização consultando a tabela para exibir as linhas atualizadas. 
Para obter mais informações, consulte a seção “UPDATE” no Oracle Database SQL Language 
Reference 11g, Release 1 (11.1). 
Observação: no geral, use a coluna da chave primária na cláusula WHERE para identificar uma única 
linha para atualização. O uso de outras colunas pode fazer com que várias linhas sejam atualizadas 
inesperadamente. Por exemplo, identificar uma única linha na tabela EMPLOYEES por nome é
arriscado, porque mais de um funcionário pode ter o mesmo nome. 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 16
Atualizando linhas em uma tabela
A instrução UPDATE modificará os valores de uma ou várias linhas específicas se a cláusula WHERE
for especificada. O exemplo no slide mostra a transferência do funcionário 113 (Popp) para o 
departamento 50. 
Se você omitir a cláusula WHERE, os valores de todas as linhas na tabela serão modificados. Examine 
as linhas atualizadas na tabela COPY_EMP.
SELECT last_name, department_id
FROM copy_emp;
Por exemplo, um funcionário que era SA_REP agora mudou para o cargo IT_PROG. Portanto, seu 
JOB_ID precisa ser atualizado e o campo comission precisa ser definido como NULL.
UPDATE employees
SET job_id = ‘IT_PROG’, commission_pct = NULL
WHERE employee_id = 114;
Observação: a tabela COPY_EMP tem os mesmos dados que a tabela EMPLOYEES.
Copyright © 2009, Oracle. Todos os direitos reservados.
Atualizando linhas em uma tabela
• Os valores de uma ou várias linhas específicas serão 
modificados se você especificar a cláusula WHERE:
• Os valores de todas as linhas na tabela serão modificados 
se você omitir a cláusula WHERE:
• Especifique SET column_name= NULL para atualizar um 
valor de coluna como NULL.
UPDATE employees
SET department_id = 50
WHERE employee_id = 113;
UPDATE copy_emp
SET department_id = 110;
…
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 17
Copyright © 2009, Oracle. Todos os direitos reservados.
UPDATE employees
SET job_id = (SELECT job_id
FROM employees 
WHERE employee_id = 205), 
salary = (SELECT salary 
FROM employees 
WHERE employee_id = 205) 
WHERE employee_id = 113;
Atualizando duas colunas com uma subconsulta
Atualize o cargo e o salário do funcionário 113 de modo a 
corresponder aos dados do funcionário 205.
Atualizando duas colunas com uma subconsulta
É possível atualizar várias colunas na cláusula SET de uma instrução UPDATE escrevendo várias 
subconsultas. A sintaxe é a seguinte: 
UPDATE table
SET column = 
(SELECT column
FROM table
WHERE condition)
[ ,
column = 
(SELECT column
FROM table
WHERE condition)]
[WHERE condition ] ;
O exemplo no slide também pode ser escrito como segue:
UPDATE employees 
SET (job_id, salary) = (SELECT job_id, salary 
FROM employees 
WHERE employee_id = 205)
WHERE employee_id = 113;
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 18
Copyright © 2009, Oracle. Todos os direitos reservados.
UPDATE copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
Atualizando linhas baseadas 
em outra tabela
Use as subconsultas nas instruções UPDATE para atualizar 
os valores das linhas em uma tabela baseada nos valores de 
outra tabela:
Atualizando linhas baseadas em outra tabela
É possível usar as subconsultas nas instruções UPDATE para atualizar os valores em uma tabela. O 
exemplo no slide atualiza a tabela COPY_EMP com base nos valores da tabela EMPLOYEES. Ele 
altera o número do departamento de todos os funcionários com o ID do cargo do funcionário 200 
para o número do departamento atual do funcionário 100.Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yrig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 19
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELTRUNCATEETE
– Instrução
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 20
Copyright © 2009, Oracle. Todos os direitos reservados.
Exclua uma linha da tabela DEPARTMENTS:
Removendo uma linha de uma tabela 
DEPARTMENTS
Removendo uma linha de uma tabela
O departamento de Contratação foi removido da tabela DEPARTMENTS (pressupondo que nenhuma 
restrição na tabela DEPARTMENTS seja violada), conforme mostrado pelo gráfico no slide.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 21
Copyright © 2009, Oracle. Todos os direitos reservados.
Instrução DELETE
É possível remover linhas existentes de uma tabela usando a 
instrução DELETE:
DELETE [FROM] table
[WHERE condition];
Sintaxe da instrução DELETE
É possível remover linhas existentes de uma tabela usando a instrução DELETE.
Na sintaxe:
table é o nome da tabela
condition identifica as linhas a serem excluídas e é composta de nomes de colunas, 
expressões, constantes, subconsultas e operadores de comparação
Observação: se nenhuma linha for excluída, a mensagem “0 rows deleted” será retornada (na guia 
Saída do script no SQL Developer)
Para obter mais informações, consulte a seção “DELETE” no Oracle Database SQL Language 
Reference 11g, Release 1 (11.1).
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 22
Copyright © 2009, Oracle. Todos os direitos reservados.
Excluindo linhas de uma tabela
• Linhas específicas serão excluídas se você especificar a 
cláusula WHERE:
• Todas as linhas na tabela serão excluídas se você omitir a 
cláusula WHERE:
DELETE FROM departments
WHERE department_name = ‘Finance';
DELETE FROM copy_emp;
Excluindo linhas de uma tabela
É possível excluir linhas específicas, especificando a cláusula WHERE na instrução DELETE. O 
primeiro exemplo no slide exclui o departamento de Contabilidade da tabela DEPARTMENTS. É
possível confirmar a operação de exclusão exibindo as linhas excluídas usando a instrução SELECT. 
SELECT *
FROM departments
WHERE department_name = ‘Finance';
No entanto, se você omitir a cláusula WHERE, todas as linhas na tabela serão excluídas. O segundo 
exemplo no slide exclui todas as linhas da tabela COPY_EMP, uma vez que nenhuma cláusula 
WHERE foi especificada.
Exemplo:
Remova as linhas identificadas na cláusula WHERE.
DELETE FROM employees WHERE employee_id = 114;
DELETE FROM departments WHERE department_id IN (30, 40);
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 23
Copyright © 2009, Oracle. Todos os direitos reservados.
Excluindo linhas baseadas 
em outra tabela
Use as subconsultas nas instruções DELETE para remover 
linhas de uma tabela baseada nos valores de outra tabela:
DELETE FROM employees
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');
Excluindo linhas baseadas em outra tabela
É possível usar as subconsultas para excluir linhas de uma tabela com base nos valores de outra
tabela. O exemplo no slide exclui todos os funcionários em um departamento, onde o nome do 
departamento contém a string Public.
A subconsulta procura a tabela DEPARTMENTS para localizar o número do departamento com base 
no nome que contém a string Public. A subconsulta alimenta o número do departamento para a 
consulta principal que exclui as linhas de dados da tabela EMPLOYEES com base no número desse 
departamento.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 24
Copyright © 2009, Oracle. Todos os direitos reservados.
Instrução TRUNCATE
• Remove todas as linhas de uma tabela, deixando-a vazia, 
mas com a estrutura intacta
• É uma instrução DDL (Data Definition Language) e não 
DML; não é possível ser desfeita facilmente
• Sintaxe:
• Exemplo:
TRUNCATE TABLE table_name;
TRUNCATE TABLE copy_emp;
Instrução TRUNCATE
Um método eficiente de esvaziar uma tabela é usar a instrução TRUNCATE.
É possível usar a instrução TRUNCATE para remover rapidamente todas as linhas de uma tabela ou 
de um cluster. A remoção das linhas com a instrução TRUNCATE é mais rápida do que removê-las 
com a instrução DELETE pelos seguintes motivos:
• A instrução TRUNCATE é DDL (Data Definition Language) e gera informações de rollback. As 
informações de rollback serão abordadas posteriormente nesta lição.
• O truncamento de uma tabela não aciona os triggers de exclusão da tabela. 
Se a tabela for o pai de uma restrição de integridade referencial, não será possível truncá-la. É
necessário desativar a restrição antes de emitir a instrução TRUNCATE. A desativação das limitações 
será abordada em uma lição subsequente.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 25
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELETE
– Instrução TRUNCATE
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 repr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 26
Copyright © 2009, Oracle. Todos os direitos reservados.
Transações do banco de dados
Uma transação de banco de dados é composta por uma das 
seguintes instruções:
• Instruções DML que compõem uma alteração consistente 
aos dados
• Uma instrução DDL
• Uma instrução DCL (Data Control Language)
Transações do banco de dados
O Oracle Server assegura a consistência de dados com base nas transações. As transações concedem 
mais flexibilidade e controle, ao alterar os dados, e asseguram a consistência dos dados no caso do 
processo do usuário ou sistema falhar.
As transações são compostas pelas instruções DML formadas de uma alteração consistente nos 
dados. Por exemplo, uma transferência de fundos entre duas contas deve incluir o débito em uma 
conta e o crédito em outra com o mesmo valor. Ambas as ações devem falhar ou obter êxito 
conjuntamente; o crédito não receberá o commit sem o débito.
Tipos de transações
Tipo Descrição 
Linguagem DML Consiste em qualquer número de instruções DML que o 
servidor Oracle trata como uma entidade única ou uma 
unidade de trabalho lógica 
 
Linguagem DDL 
Consiste em uma única instrução DDL 
Linguagem DCL Consiste em uma única instrução DCL 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 27
Copyright © 2009, Oracle. Todos os direitos reservados.
Transações do banco de dados: início e fim
• Começa quando a primeira instrução DML SQL é
executada.
• Termina com um dos seguintes eventos:
– Uma instrução COMMIT ou ROLLBACK é emitida.
– Uma instrução DDL ou DCL é executada (commit
automático).
– O usuário sai do SQL Developer ou do SQL*Plus.
– O sistema gera uma falha.
Transação do banco de dados: início e fim
Quando ocorre o início e o término de uma transação de banco de dados? 
Uma transação começa quando a primeira instrução DML é encontrada e termina quando ocorre uma 
das seguintes situações:
• Uma instrução COMMIT ou ROLLBACK é emitida.
• Uma instrução DDL, como CREATE, é emitida.
• Uma instrução DCL é emitida.
• O usuário sai do SQL Developer ou do SQL*Plus.
• Uma máquina falha ou o sistema gera um erro.
Após o término de uma transação, a próxima instrução SQL executável iniciará automaticamente a 
próxima transação.
Uma instrução DDL ou DCL será submetida automaticamente a um commit e, portanto, encerrará
implicitamente uma transação.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 28
Copyright © 2009, Oracle. Todos os direitos reservados.
Vantagens das instruções
COMMIT e ROLLBACK
Com as instruções COMMIT e ROLLBACK, é possível:
• Assegurar a consistência do dados
• Visualizar as alterações nos dados antes de torná-las 
permanentes
• Agrupar operações logicamente relacionadas
Vantagens das instruções COMMIT e ROLLBACK
Com as instruções COMMIT e ROLLBACK, você tem controle sobre a permanência das alterações de 
dados.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 29
Copyright © 2009, Oracle. Todos os direitos reservados.
Instruções explícitas do controle de transações
SAVEPOINT B
SAVEPOINT A
DELETE
INSERT
UPDATE
INSERT
COMMITTempo
Transação
ROLLBACK 
to SAVEPOINT B
ROLLBACK 
to SAVEPOINT A
ROLLBACK
Instruções explícitas do controle de transações
É possível controlar a lógica das transações usando as instruções COMMIT, SAVEPOINT e 
ROLLBACK.
Observação: não é possível efetuar um COMMIT para um SAVEPOINT. SAVEPOINT não é SQL no 
padrão ANSI.
Instrução Descrição 
COMMIT 
 
Termina a transação atual, tornando permanentes todas as 
alterações de dados pendentes 
SAVEPOINT name Marca um ponto de salvamento na transação 
atual 
ROLLBACK ROLLBACK termina a transação atual e descarta todas as 
alterações de dados pendentes. 
ROLLBACK TO 
SAVEPOINT name 
ROLLBACK TO SAVEPOINT efetua rollback da transação 
atual para o ponto de salvamento especificado e, como 
consequência, descarta todas as alterações e/ou pontos de 
salvamento criados após o ponto de salvamento do rollback 
atual. Se você omitir a cláusula TO SAVEPOINT, a instrução 
ROLLBACK efetuará rollback de toda a transação. Como os 
pontos de salvamento são lógicos, não há como listar os 
pontos de salvamento criados. 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 30
Copyright © 2009, Oracle. Todos os direitos reservados.
UPDATE...
SAVEPOINT update_done;
INSERT...
ROLLBACK TO update_done;
Efetuando rollback das alterações 
para um marcador
• Crie um marcador na transação atual usando a instrução 
SAVEPOINT.
• Efetue rollback para o marcador usando a instrução 
ROLLBACK TO SAVEPOINT.
Efetuando rollback das alterações para um marcador
É possível criar um marcador na transação atual usando a instrução SAVEPOINT, que divide a 
transação em seções menores. Em seguida, é possível descartar as alterações pendentes até esse 
marcador usando a instrução ROLLBACK TO SAVEPOINT. 
Observe que, se você criar um segundo savepoint com o mesmo nome de um savepoint anterior, este 
último será excluído.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 31
Copyright © 2009, Oracle. Todos os direitos reservados.
Processamento implícito de transações
• Ocorre um commit automático nas seguintes 
circunstâncias:
– Uma instrução DDL é emitida
– Uma instrução DCL é emitida
– Saída normal do SQL Developer ou SQL*Plus sem a 
emissão explícita das instruções COMMIT ou ROLLBACK
• Um rollback automático ocorre devido a um encerramento 
anormal do SQL Developer ou SQL*Plus, de uma falha do 
sistema.
Processamento implícito de transações
Observação: no SQL*Plus, o comando AUTOCOMMIT pode ser alternado para ON (ativado) ou OFF 
(desativado). Se definido como ON, cada instrução DML individual será submetida a commit assim 
que executada. Não será possível efetuar rollback das alterações. Se definida como OFF, a instrução 
COMMIT ainda poderá ser emitida explicitamente. Além disso, a instrução COMMIT será emitida 
quando uma instrução DDL for emitida ou quando vocêsair do SQL*Plus. O comando SET
AUTOCOMMIT ON/OFF é ignorado no SQL Developer. A DML será submetida a commit em uma 
saída normal do SQL Developer apenas se a preferência Commit Automático estiver ativada. Para 
ativar o Commit Automático, execute o procedimento a seguir:
• No menu Ferramentas, selecione Preferências. Na caixa de diálogos Preferências, expanda o 
Banco de Dados e selecione Parâmetros da Planilha.
• No painel direito, marque a opção Commit Automático na Planilha SQL. Clique em OK.
Status Circunstâncias 
Automatic commit A instrução DDL ou DCL é executada 
O SQL Developer ou SQL*Plus foi encerrado normalmente, 
sem a execução explícita dos comandos COMMIT ou 
ROLLBACK. 
Automatic rollback Encerramento anormal do SQL Developer ou do SQL*Plus 
ou falha no sistema 
 
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 32
Processamento implícito de transações (continuação)
Falhas do sistema
Quando uma transação é interrompida por uma falha do sistema, o rollback de toda a transação é
automático. Isso evita o erro de causar alterações indesejáveis nos dados e retorna as tabelas ao 
estado no momento do último commit. Desse modo, o Oracle Server protege a integridade das 
tabelas.
No SQL Developer, para executar uma saída normal da sessão, selecione Sair no menu Arquivo. No 
SQL*Plus, uma saída normal requer a inserção do comando EXIT no prompt. O fechamento da 
janela é interpretado como uma saída anormal.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 33
Copyright © 2009, Oracle. Todos os direitos reservados.
Estado dos dados 
antes do COMMIT ou ROLLBACK
• O estado prévio dos dados pode ser recuperado.
• O usuário atual pode examinar os resultados das 
operações DML usando a instrução SELECT.
• Outros usuários não podem exibir os resultados das 
instruções DML emitidas pelo usuário atual.
• As linhas afetadas estão bloqueadas; elas não podem ser 
alteradas por outros usuários.
Estado dos dados antes do COMMIT ou ROLLBACK
Cada alteração de dados feita durante a transação é temporária até que a alteração seja submetida a 
commit.
O estado dos dados antes que as instruções COMMIT ou ROLLBACK sejam emitidas pode ser descrito 
como segue:
• A manipulação dos dados afeta primeiramente o buffer do banco de dados. Desse modo, o 
estado anterior dos dados pode ser recuperado.
• O usuário atual pode examinar os resultados das operações de manipulação de dados, 
consultando as tabelas.
• Outros usuários não podem ver os resultados das operações de manipulação de dados feitas pelo 
usuário atual. O Oracle Server estabelece a consistência de leitura para assegurar que cada 
usuário veja a posição dos dados existentes no último commit.
• As linhas afetadas são bloqueadas; elas não podem ser alteradas por outros usuários.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 34
Copyright © 2009, Oracle. Todos os direitos reservados.
Estado dos dados depois do COMMIT
• As alterações dos dados são salvas no banco de dados.
• O estado anterior dos dados é sobrescrito.
• Todos os usuários podem exibir os resultados.
• Os bloqueios nas linhas afetadas são liberados; elas ficam 
disponíveis para serem manipuladas por outros usuários.
• Todos os pontos de salvamento são apagados.
Estado dos dados depois do COMMIT
Torne todas as alterações permanentes usando a instrução COMMIT. Isto é o que acontece depois de 
uma instrução COMMIT:
• As alterações dos dados são gravadas no banco de dados.
• O estado anterior dos dados não está mais disponível com consultas SQL normais.
• Todos os usuários podem visualizar os resultados da transação.
• Os bloqueios nas linhas afetadas são liberados; as linhas estão, agora, disponíveis para que 
outros usuários executem novas alterações de dados.
• Todos os pontos de salvamento são apagados.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 35
Copyright © 2009, Oracle. Todos os direitos reservados.
COMMIT;
Efetuando commit de dados
• Faça as alterações:
• Efetue commit nas alterações:
DELETE FROM employees
WHERE employee_id = 99999;
INSERT INTO departments 
VALUES (290, 'Corporate Tax', NULL, 1700);
Efetuando commit de dados
No exemplo no slide, a linha é excluída da tabela EMPLOYEES e uma nova linha é inserida na tabela 
DEPARTMENTS. As alterações são salvas emitindo a instrução COMMIT.
Exemplo:
Remova os departamentos 290 e 300 na tabela DEPARTMENTS e atualize uma linha na tabela 
EMPLOYEES. Salve a alteração dos dados.
DELETE FROM departments
WHERE department_id IN (290, 300);
UPDATE employees
SET department_id = 80
WHERE employee_id = 206;
COMMIT;
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 36
Copyright © 2009, Oracle. Todos os direitos reservados.
DELETE FROM copy_emp;
ROLLBACK ;
Estado dos dados depois do ROLLBACK
Descarte todas as alterações pendentes usando a instrução 
ROLLBACK:
• As alterações nos dados estão desfeitas.
• O estado anterior dos dados é restaurado.
• Os bloqueios nas linhas afetadas são liberados.
Estado dos dados depois do ROLLBACK
Descarte todas as alterações pendentes usando a instrução ROLLBACK, o que resulta em:
• As alterações nos dados estão desfeitas.
• O estado anterior dos dados é restaurado.
• Os bloqueios nas linhas afetadas são liberados.Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 37
Copyright © 2009, Oracle. Todos os direitos reservados.
Estado dos dados depois do ROLLBACK: exemplo
DELETE FROM test;
25,000 rows deleted.
ROLLBACK;
Rollback complete.
DELETE FROM test WHERE id = 100;
1 row deleted.
SELECT * FROM test WHERE id = 100;
No rows selected.
COMMIT;
Commit complete.
Estado dos dados depois do ROLLBACK: exemplo
Ao tentar remover um registro da tabela TEST, é possível esvaziá-la acidentalmente. No entanto, 
você pode corrigiro erro, emitindo novamente a instrução apropriada e tornando a alteração nos 
dados permanente.Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 38
Copyright © 2009, Oracle. Todos os direitos reservados.
Rollback no nível da instrução
• Se uma única instrução DML falhar durante a execução, 
o rollback será efetuado somente nessa instrução.
• O Oracle Server implementa um ponto de savepoint
implícito.
• Todas as outras alterações são retidas.
• O usuário deve terminar as transações explicitamente, 
executando uma instrução COMMIT ou ROLLBACK.
Rollback no nível da instrução
Parte de uma transação poderá se descartada por meio de um rollback implícito se um erro de 
execução de instrução for detectado. Se uma única instrução DML falhar durante a execução de uma 
transação, seu efeito será desfeito por um rollback no nível da instrução, mas as alterações feitas 
pelas instruções DML anteriores na transação não serão descartadas. Elas podem ser submetidas a 
commit ou rollback explicitamente pelo usuário.
O Oracle Server emite um commit implícito antes e depois de qualquer instrução DDL. Assim, 
mesmo se uma instrução DDL não executar com êxito, não será possível efetuar rollback da 
instrução anterior porque o servidor emitiu um commit.
Termine suas transações explicitamente, executando uma instrução COMMIT ou ROLLBACK.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 39
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELETE
– Instrução TRUNCATE
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 40
Copyright © 2009, Oracle. Todos os direitos reservados.
Consistência na leitura
• A consistência na leitura garante uma view consistente 
dos dados em todos os momentos.
• As alterações feitas por um usuário não entra em conflito 
com as realizadas por outro usuário.
• A consistência na leitura assegura que, nos mesmos 
dados:
– Os leitores não aguardem os gravadores
– Os gravadores não aguardem os leitores
– Os gravadores aguardem gravadores
Consistência na leitura
Os usuários do banco de dados acessam o banco de dados de dois modos:
• Operações de leitura (instrução SELECT)
• Operações de gravação (instruções INSERT, UPDATE, DELETE)
É necessário ter consistência na leitura para que:
• Uma view consistente dos dados esteja assegurada para o leitor e o gravador do banco de dados.
• Os leitores não exibam dados que estejam em processo de alteração.
• Os gravadores tenham certeza de que as alterações no banco de dados são feitas de modo 
consistente.
• As alterações feitas por um gravador não interrompam nem entrem em conflito com as 
alterações feitas por outro gravador.
A finalidade da consistência na leitura é assegurar que cada usuário veja a posição dos dados 
existentes no último commit, antes do início de uma operação DML.
Observação: O mesmo usuário pode efetuar log-in em diferentes sessões. Cada sessão manterá a 
consistência da leitura do modo descrito acima, mesmo se forem os mesmos usuários.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 41
Copyright © 2009, Oracle. Todos os direitos reservados.
Implementando consistência na leitura
SELECT *
FROM userA.employees;
UPDATE employees
SET salary = 7000
WHERE last_name = 'Grant';
Blocos de
dados
Segmentos
de undo
Dados 
alterados e
inalterados
Antes da 
alteração
(dados 
“antigos”)
Usuário A
Usuário B
Imagem
consistente
na leitura
Implementando consistência na leitura
A consistência na leitura é uma implementação automática. Ela mantém uma cópia parcial do banco 
de dados nos segmentos de undo. A imagem consistente na leitura é construída a partir dos dados 
submetidos a commit na tabela e dos dados antigos que estão sendo alterados e ainda não foram 
submetidos a commit a partir do segmento de undo. 
Quando uma operação de inserção, atualização ou exclusão é feita no banco de dados, o Oracle 
Server faz uma cópia dos dados, antes de eles serem alterados, e a grava em um segmento de undo.
Todos os leitores, exceto quem emitiu a alteração, veem a posição do banco de dados existente antes 
do início das alterações; o que eles veem é um "snapshot" dos dados no segmento de undo.
Antes das alterações serem submetidas a commit no banco de dados, apenas o usuário que está
modificando os dados vê o banco de dados com as alterações. Ninguém mais visualiza o snapshot no 
segmento de undo. Isso garante para os leitores a leitura consistente dos dados que não estão 
sofrendo alterações no momento.
Quando uma instrução DML é submetida a commit, a alteração feita no banco de dados torna-se 
visível para qualquer um que emitir uma instrução SELECT depois do commit ser efetuado. O 
espaço ocupado pelos dados antigos no arquivo do segmento de undo é liberado para reutilização.
Se a transação for submetida a um rollback, as alterações serão desfeitas:
• A versão original, mais antiga, dos dados no segmento de undo é gravada novamente na tabela.
• Todos os usuários veem a posição do banco de dados existente antes do início da transação.
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional e Tecnologica Impacta- UniฺImpacta
Oracle Database 11g: Fundamentos de SQL I 9 - 42
Copyright © 2009, Oracle. Todos os direitos reservados.
Agenda de lições
• Adicionando novas linhas a uma tabela
– Instrução INSERT
• Alterando dados em uma tabela
– Instrução UPDATE
• Removendo linhas de uma tabela:
– Instrução DELETE
– Instrução TRUNCATE
• Controle de transações de banco de dados usando 
COMMIT, ROLLBACK e SAVEPOINT
• Consistência na leitura
• Cláusula FOR UPDATE em uma instrução SELECT
Hen
riqu
e Ca
yres
 Ritt
er (h
enri
que
ฺritte
r@t
tben
ficaฺ
com
ฺbr) 
has
 a
non
-tran
sfer
able
 lice
nse
 to u
se t
his S
tude
nt G
uide
ฺ
U
na
ut
ho
riz
ed
 re
pr
od
uc
tio
n 
or
 d
is
tri
bu
tio
n 
pr
oh
ib
ite
dฺ
 C
op
yr
ig
ht
©
 2
01
4,
 O
ra
cl
e 
an
d/
or
 it
s 
af
fil
ia
te
sฺ
Uniao Educacional

Continue navegando