Oracle Sql PortuguêS
-
Upload
diogolopez -
Category
Business
-
view
12.337 -
download
2
description
Transcript of Oracle Sql PortuguêS
![Page 1: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/1.jpg)
1-1 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Introdução ao Oracle9i: SQL
Apresentação Eletrônica
40049BP11Produção 1.1Fevereiro de 2002D34392
![Page 2: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/2.jpg)
1-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Copyright © Oracle Corporation, 2000, 2001. Todos os direitos reservados.
Esta documentação contém informações patenteadas pela Oracle Corporation.É fornecida sob um contrato de licença que contém restrições sobre seu uso esua divulgação, sendo também protegida pela legislação de direitos autorais. Não épermitida a engenharia reversa do programa de computador. Se esta documentaçãofor entregue/distribuída a uma Agência do Departamento de Defesa do Governo dosEstados Unidos da América do Norte, será então entregue/distribuída com DireitosRestritos e a seguinte legenda será aplicável:
Legenda de Direitos Restritos
O uso, duplicação ou divulgação por aquele Governo estão sujeitos às restriçõesaplicáveis aos programas comerciais de computadores e serão considerados comoprogramas de computador com Direitos Restritos de acordo com a legislação federaldaquele Governo, conforme descrito no subparágrafo da legislação norte-americana(c)(1)(ii) de DFARS 252.227-7013, Direitos sobre Dados Técnicos e Programas deComputador (outubro de 1988).
Proibida a reprodução total ou parcial desta documentação sem a expressaautorização prévia por escrito da Oracle Corporation ou da Oracle do Brasil SistemasLtda. A cópia deste material, de qualquer forma ou por qualquer meio, eletrônico,mecânico ou de outra natureza, inclusive através de processos xerográficos, defotocópia e de gravação, constitui violação da legislação de direitos autorais e serápunida civil e/ou criminalmente na forma da lei.
Se esta documentação for entregue/distribuída a uma Agência do Governo dosEstados Unidos da América do Norte que não esteja subordinada ao Departamentode Defesa, será então entregue/distribuída com "Direitos Restritos" conforme definidono FAR 52.227-14, Direitos sobre Dados - Geral, inclusive a Alternativa III (junhode 1987).
As informações contidas neste documento estão sujeitas a alterações sem avisoprévio. Se você encontrar algum problema na documentação, envie a EducationProducts - Oracle Corporation ou a Education - Oracle do Brasil Sistemas Ltda.uma descrição de tal problema por escrito. A Oracle Corporation e a Oracle doBrasil Sistemas Ltda. não garantem que este documento esteja isento de erros.
Oracle e todos os demais produtos Oracle citados nesta documentação são marcascomerciais ou marcas comerciais registradas da Oracle Corporation.
Todos os outros nomes de produtos ou de empresas são aqui mencionadosapenas para fins de identificação e podem ser marcas comerciais de seusrespectivos proprietários.
Autores
Nancy GreenbergPriya Nathan
Colaboradores Técnicose RevisoresJosephine TurnerMartin AlvarezAnna AtkinsonDon BatesMarco BerbeekAndrew BranniganLaszlo CzinkoczkiMichael GerlachSharon GrayRosita HanomanMozhe JalaliSarah JonesCharbel KhouriChristopher LawlessDiana LorentzNina MinchenCuong NguyenDaphne NougierPatrick OdellLaura PezziniStacey ProcterMaribel RenauBryan RobertsHelen RobertsonSunshine SalmonCasa SharifBernard SoleillantCraig SpoonemoreRuediger SteffanKarla VillasenorAndree WheeleyLachlan Williams
Editor
Nita Brozowski
![Page 3: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/3.jpg)
Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Mapa de Cursos
![Page 4: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/4.jpg)
Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Currículo de Linguagens do Oracle9i
Introduction to Oracle9ifor
Experienced SQL Users (Introdução ao Oracle9i para
Usuários Experientes em SQL)
inClass
Oracle9i: Advanced PL/SQLinClass
Oracle9i: Advanced PL/SQLinClass
Oracle9i: SQL for End Users
inClass
Oracle9i: SQL for End Users
inClass
Oracle9i: Develop PL/SQL Program Units
Oracle9i: Develop PL/SQL Program Units
Oracle9i: PL/SQLFundamentals
ouIntroduction to Oracle9i: SQL Basics (Introdução ao Oracle9i: SQL Básico)
Introdução ao Oracle9i: SQL
inClass
Oracle9i: Advanced SQL (Oracle9i: SQL
Avançado)
Oracle9i: Program with PL/SQL (Oracle9i: Unidades de Programas PL/SQL)
inClass
![Page 5: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/5.jpg)
ICopyright © Oracle Corporation, 2001. Todos os direitos reservados.
Introdução
![Page 6: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/6.jpg)
I-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Listar os recursos do Oracle9i� Discutir os aspectos teóricos e físicos de um banco
de dados relacional� Descrever a implementação Oracle do RDBMS e
ORDBMS
![Page 7: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/7.jpg)
I-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Oracle9i
Escalabilidade
Confiabilidade
Modelo dedesenvolvimento
único
Conjuntosde habilidades
comuns
Uma interfacede
gerenciamento
Umfornecedor
![Page 8: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/8.jpg)
I-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Oracle9i
![Page 9: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/9.jpg)
I-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Oracle9i Application Server
Business IntelligenceBusiness intelligence
Aplicações TransacionaisAplicações Transacionais
PortaisPortais
APACHE
IntegraçãoIntegração
![Page 10: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/10.jpg)
I-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Oracle9i Database
MultimídiaMultimídia
Dados Relacionais de ObjetosDados Relacionais de Objetos
MensagensMensagens
Documentos
XML
Documentos
XML
![Page 11: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/11.jpg)
I-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Sistema de Gerenciamento de Banco de Dados Relacional de Objetos e Relacional
� Modelo relacional e modelo relacional de objetos� Objetos e tipos de dados definidos pelo usuário� Compatibilidade total com o banco de dados
relacional� Suporte de objetos grandes e multimídia� Recursos de servidor de banco de dados de alta
qualidade
![Page 12: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/12.jpg)
I-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Oracle Internet PlatformClientes
Ger
enci
amen
tode
sist
ema
Serviços de rede
Bancosde dados
Servidores deaplicações
Ferramentas
dedesenvolvim
entoAplicações paraInternet
Apresentação elógica comercial
Lógica comerciale dados
Qualquernavegador
Qualquercliente FTP
Qualquerclientede correio
JavaJava
SQLSQLSQL
PL/SQLPL/SQLPL/SQL
![Page 13: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/13.jpg)
I-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Ciclo de Vida Útil deDesenvolvimento do Sistema
Estratégiae
análiseProjeto
Construçãoe
documentaçãoTransição
Produção
![Page 14: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/14.jpg)
I-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Armazenamento de Dadosem Diferentes Mídias
Arquivo físicoPlanilha eletrônica
Banco de Dados
![Page 15: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/15.jpg)
I-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conceito de Banco de Dados Relacional
� O Dr. E. F. Codd propôs o modelo relacional desistemas de bancos de dados em 1970.
� Ele é a base para o RDBMS (relational database management system).
� O modelo relacional consiste nos seguintes itens:� Conjunto de objetos ou relações� Conjunto de operadores para agir sobre as
relações� Integridade de dados para fins de precisão e
consistência
![Page 16: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/16.jpg)
I-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definição de Banco de Dados Relacional
Um banco de dados relacional é um conjunto derelações ou tabelas bidimensionais.
ServidorServidorOracleOracle
Nome da Tabela: EMPLOYEES Nome da Tabela: DEPARTMENTS
� �
![Page 17: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/17.jpg)
I-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Modelos de Dados
Modelo desistema
na mentedo cliente
Modelo de entidadedo modelo do cliente
Modelo de tabela do modelo de entidade
Tabelas em disco
ServidorOracle
![Page 18: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/18.jpg)
I-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Crie um diagrama de relacionamento de entidades apartir de narrativas ou especificações de negócios
� Cenário� ". . . Atribua um ou mais funcionários a um
departamento. . ."� ". . . Alguns departamentos ainda não têm
funcionários atribuídos a eles. . ."
� Crie um diagrama de relacionamento de entidades apartir de narrativas ou especificações de negócios
� Cenário� ". . . Atribua um ou mais funcionários a um
departamento. . ."� ". . . Alguns departamentos ainda não têm
funcionários atribuídos a eles. . ."
Modelo de Relacionamento de Entidades
EMPLOYEEEMPLOYEE#* #* nnúmeroúmero** nomenomeoo cargocargo
DEPARTMENTDEPARTMENT#* #* nnúmeroúmero** nomenomeoo locallocal
atribuído a
composto de
![Page 19: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/19.jpg)
I-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Convenções de Modelo para Relacionamento de Entidades
Entidade"Soft box"Nome exclusivo individualLetras maiúsculasSinônimo entre parênteses
AtributoNome individualLetras minúsculasObrigatório marcado com "*"Opcional marcado com "o"
UID (Identificador Exclusivo)Principal marcado com "#"Secundário marcado com "(#)"
EMPLOYEEEMPLOYEE#* #* nnúmeroúmero** nomenomeoo cargocargo
DEPARTMENTDEPARTMENT#* #* nnúmeroúmero** nomenomeoo locallocal
atribuído a
composto de
![Page 20: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/20.jpg)
I-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Relacionando Várias Tabelas
� Cada linha de dados de uma tabela é identificada comexclusividade por uma chave primária (PK).
� Você pode relacionar logicamente dados de várias tabelas usando as chaves estrangeiras (FK).
Nome da Tabela: EMPLOYEESNome da Tabela: DEPARTMENTS
Chave primária Chave primáriaChave estrangeira
�
![Page 21: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/21.jpg)
I-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Terminologia de Banco de Dados Relacional
1
23 4
5
6
![Page 22: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/22.jpg)
I-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Propriedades deBanco de Dados Relacional
Um banco de dados relacional:� Pode ser acessado e modificado com a execução
de instruções SQL (Structured Query Language)� Contém um conjunto de tabelas sem ponteiros físicos� Usa um conjunto de operadores
![Page 23: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/23.jpg)
I-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comunicando-se com um RDBMS Usando o Código SQL
SELECT department_name FROM departments;
SELECT department_name FROM departments;
A instrução SQLé informada.
ServidorOracle
A instrução éenviada ao Oracle
Server.
![Page 24: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/24.jpg)
I-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Sistema de Gerenciamento deBanco de Dados Relacional
Tabelas deusuários
Dicionáriode dados
ServidorOracle
![Page 25: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/25.jpg)
I-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instruções SQLSELECT
INSERTUPDATEDELETEMERGE
CREATEALTERDROPRENAMETRUNCATE
COMMITROLLBACKSAVEPOINT
GRANTREVOKE
Recuperação de dados
DML (Data Manipulation Language)
DDL (Data Definition Language)
Controle de transação
DCL (Data Control Language)
![Page 26: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/26.jpg)
I-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tabelas Usadas no CursoEMPLOYEES
DEPARTMENTS JOB_GRADES
![Page 27: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/27.jpg)
I-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
� O Oracle9i Server é o banco de dados de computação na Internet.
� O Oracle9i é baseado no ORDBMS.� Os bancos de dados relacionais são compostos por
relações, gerenciados por operações relacionais eregidos por restrições de integridade de dados.
� Com o Oracle Server, você pode armazenar egerenciar informações usando a linguagem SQL e o mecanismo PL/SQL.
![Page 28: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/28.jpg)
1Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Instruções SELECTSQL Básicas
![Page 29: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/29.jpg)
1-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Listar os recursos das instruções SELECT SQL� Executar uma instrução SELECT básica� Diferenciar instruções SQL de comandos doiSQL*Plus
![Page 30: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/30.jpg)
1-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Recursos das Instruções SELECT SQL
SeleçãoProjeção
Tabela 1 Tabela 2
Tabela 1Tabela 1
Junção
![Page 31: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/31.jpg)
1-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instrução SELECT Básica
SELECT *|{[DISTINCT] coluna|expressão [apelido],...}FROM tabela;
SELECT *|{[DISTINCT] coluna|expressão [apelido],...}FROM tabela;
� SELECT identifica quais colunas� FROM identifica qual tabela
![Page 32: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/32.jpg)
1-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT *FROM departments;
Selecionando Todas as Colunas
![Page 33: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/33.jpg)
1-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Selecionando Colunas Específicas
SELECT department_id, location_idFROM departments;
![Page 34: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/34.jpg)
1-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Instruções SQL
� As instruções SQL não fazem distinção entremaiúsculas e minúsculas.
� As instruções SQL podem estar em uma ou maislinhas.
� As palavras-chave não podem ser abreviadas oudividas de uma linha para outra.
� Normalmente, as cláusulas são colocadas em linhasseparadas.
� Os recuos são usados para aperfeiçoar a legibilidade.
![Page 35: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/35.jpg)
1-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Defaults de Cabeçalho de Coluna
� iSQL*Plus:� Justificação de cabeçalho default: centralizada� Exibição de cabeçalho default: maiúsculas
� SQL*Plus:� Os cabeçalhos das colunas de caracteres e datas
são justificados à esquerda� Os cabeçalhos das colunas de números são
justificados à direita� Exibição de cabeçalho default: maiúsculas
![Page 36: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/36.jpg)
1-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Expressões Aritméticas
Crie expressões com dados numéricos e de datas usandooperadores aritméticos.
Operador
+
-
*
/
Descrição
Adicionar
Subtrair
Multiplicar
Dividir
![Page 37: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/37.jpg)
1-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Operadores Aritméticos
SELECT last_name, salary, salary + 300FROM employees;
�
![Page 38: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/38.jpg)
1-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Precedência de Operadores
� A multiplicação e a divisão têm prioridade sobre aadição e a subtração.
� Os operadores com a mesma prioridade são avaliadosda esquerda para a direita.
� Os parênteses são usados para forçar a avaliaçãopriorizada e para esclarecer as instruções.
*** /// +++ ___
![Page 39: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/39.jpg)
1-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Precedência de Operadores
SELECT last_name, salary, 12*salary+100FROM employees;
�
![Page 40: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/40.jpg)
1-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Parênteses
SELECT last_name, salary, 12*(salary+100)FROM employees;
�
![Page 41: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/41.jpg)
1-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definindo um Valor Nulo
� Nulo é um valor que não está disponível, não éatribuído, é desconhecido ou não é aplicável.
� Um valor nulo não é o mesmo que um zero ou umespaço em branco.
SELECT last_name, job_id, salary, commission_pctFROM employees;
�
�
![Page 42: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/42.jpg)
1-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, 12*salary*commission_pctFROM employees;
Valores Nulos nas Expressões Aritméticas
As expressões aritméticas que contêm um valor nulo sãoavaliadas como nulas.
�
�
![Page 43: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/43.jpg)
1-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definindo um Apelido de Coluna
Um apelido de coluna:� Renomeia um cabeçalho de coluna� É útil para cálculos� Segue imediatamente o nome da coluna. Também
pode haver a palavra-chave AS opcional entre onome da coluna e o apelido
� Necessita de aspas duplas caso contenha espaçosou caracteres especiais ou faça distinção entremaiúsculas e minúsculas
![Page 44: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/44.jpg)
1-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Apelidos de Coluna
SELECT last_name "Name", salary*12 "Annual Salary"FROM employees;
SELECT last_name AS name, commission_pct commFROM employees;
�
�
![Page 45: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/45.jpg)
1-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Operador de Concatenação
Um operador de concatenação:� Concatena colunas ou strings de caracteres a outras
colunas� É representado por duas barras verticais (||)� Cria uma coluna resultante que é uma expressão de
caracteres
![Page 46: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/46.jpg)
1-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador de Concatenação
SELECT last_name||job_id AS "Employees"FROM employees;
�
![Page 47: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/47.jpg)
1-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Strings de Caracteres Literais
� Um literal é um caractere, um número ou uma dataincluída na lista SELECT.
� Os valores literais de caracteres e datas devem estarentre aspas simples.
� Cada string de caracteres é gerada uma vez para cadalinha retornada.
![Page 48: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/48.jpg)
1-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Strings de Caracteres Literais
SELECT last_name ||' is a '||job_id AS "Employee Details"FROM employees;
�
![Page 49: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/49.jpg)
1-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Linhas Duplicadas
A exibição default das consultas é de todas as linhas,incluindo linhas duplicadas.
SELECT department_idFROM employees;
SELECT department_idFROM employees;
�
![Page 50: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/50.jpg)
1-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Eliminando Linhas Duplicadas
Elimine linhas duplicadas usando a palavra-chaveDISTINCT na cláusula SELECT.SELECT DISTINCT department_idFROM employees;
![Page 51: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/51.jpg)
1-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Interação entre SQL e iSQL*Plus
Instruções SQLServidorOracle
Resultados da consultaResultados da consultaiSQL*PlusComandos
Cliente
Relatório formatado
InternetInternetBrowserBrowser
iiSQL*PlusSQL*Plus
![Page 52: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/52.jpg)
1-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instruções SQL VersusComandos do iSQL*Plus
SQLSQLSQLSQL
SQL� Uma linguagem� Padrão ANSI� A palavra-chave não
pode ser abreviada� As instruções
manipulam definiçõesde dados e tabela nobanco de dados
iiSQL*PlusSQL*Plus� Um ambiente� Patenteado pela Oracle� As palavras-chave podem ser
abreviadas� Os comandos não permitem a
manipulação dos valores no bancode dados
� É executado em um browser� Carregado centralmente, não precisa
ser implementado em cada máquina
iiSQL*PlusSQL*PlusiiSQL*PlusSQL*Plus
![Page 53: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/53.jpg)
1-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do iSQL*Plus
Após efetuar login no iSQL*Plus, você poderá:� Descrever a estrutura de tabela� Editar a instrução SQL� Executar o SQL no iSQL*Plus� Salvar instruções SQL em arquivos e anexá-las a
arquivos� Executar instruções armazenadas em arquivos salvos� Carregar comandos de um arquivo de texto na janela
Edit (Editar) do iSQL*Plus
![Page 54: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/54.jpg)
1-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Efetuando Login no iSQL*Plus
No seu ambiente de browser Windows:
![Page 55: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/55.jpg)
1-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Ambiente do iSQL*Plus
3 4 5
6
71
2
8 910
![Page 56: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/56.jpg)
1-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exibindo a Estrutura de Tabela
Use o comando DESCRIBE do iSQL*Plus para exibira estrutura de uma tabela.
DESC[RIBE] nome_da_tabelaDESC[RIBE] nome_da_tabela
![Page 57: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/57.jpg)
1-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exibindo a Estrutura de Tabela
DESCRIBE employeesDESCRIBE employees
![Page 58: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/58.jpg)
1-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Interagindo com Arquivos de Script
SELECT last_name, hire_date, salaryFROM employees; 1
2
![Page 59: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/59.jpg)
1-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Interagindo com Arquivos de Script
1
D:\temp\emp_sql.htm
2SELECT last_name, hire_date, salaryFROM employees;
3
![Page 60: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/60.jpg)
1-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Interagindo com Arquivos de Script
DESCRIBE employeesSELECT first_name, last_name, job_idFROM employees;
1
23
![Page 61: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/61.jpg)
1-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
SELECT *|{[DISTINCT] coluna|expressão [apelido],...}FROM tabela;
SELECT *|{[DISTINCT] coluna|expressão [apelido],...}FROM tabela;
Nesta lição, você aprendeu a:� Criar uma instrução SELECT que:
� Retorne todas as linhas e colunas de uma tabela� Retorne colunas especificadas de uma tabela� Use apelidos de coluna para fornecer cabeçalhos
de coluna descritivos� Use o ambiente do iSQL*Plus para criar, salvar e
executar instruções SQL e comandos do iSQL*Plus.
![Page 62: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/62.jpg)
1-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 1
Este exercício abrange os seguintes tópicos:� Selecionando todos os dados a partir de tabelas
diferentes� Descrevendo a estrutura de tabelas� Executando cálculos aritméticos e especificando
nomes de colunas� Usando o iSQL*Plus
![Page 63: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/63.jpg)
2Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Restringindo e Classificando Dados
![Page 64: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/64.jpg)
2-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Limitar as linhas recuperadas por uma consulta� Classificar as linhas recuperadas por uma consulta
![Page 65: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/65.jpg)
2-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Limitando Linhas Usando uma Seleção
"recuperar todosos funcionáriosdo departamento 90"
EMPLOYEES
�
![Page 66: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/66.jpg)
2-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Limitando as Linhas Selecionadas
� Restrinja as linhas retornadas usando a cláusula WHERE.
� A cláusula WHERE segue a cláusula FROM.
SELECT *|{[DISTINCT] coluna|expressão [apelido],...}FROM tabela[WHERE condição(ões)];
![Page 67: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/67.jpg)
2-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Cláusula WHERE
SELECT employee_id, last_name, job_id, department_idFROM employeesWHERE department_id = 90;
![Page 68: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/68.jpg)
2-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Strings de Caracteres e Datas
� As strings de caracteres e valores de data aparecementre aspas simples.
� Os valores de caractere fazem distinção entremaiúsculas e minúsculas e os valores de data fazemdistinção entre formatos.
� O formato de data default é DD-MON-RR.SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'Whalen';
![Page 69: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/69.jpg)
2-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Condições de Comparação
Operador
=
>
>=
<
<=
<>
Significado
Igual a
Maior que
Maior que ou igual a
Menor que
Menor que ou igual a
Diferente de
![Page 70: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/70.jpg)
2-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, salary FROM employeesWHERE salary <= 3000;
Usando Condições de Comparação
![Page 71: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/71.jpg)
2-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Outras Condições de Comparação
Operador
BETWEEN
...AND...
IN(set)
LIKE
IS NULL
Significado
Entre dois valores (inclusive),
Corresponde qualquer valor de uma lista
Corresponde um padrão de caractere
É um valor nulo
![Page 72: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/72.jpg)
2-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Condição BETWEEN
Use a condição BETWEEN para exibir linhas baseadasem uma faixa de valores.SELECT last_name, salary FROM employeesWHERE salary BETWEEN 2500 AND 3500;
Limite inferior Limite superior
![Page 73: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/73.jpg)
2-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, salary, manager_idFROM employeesWHERE manager_id IN (100, 101, 201);
Usando a Condição IN
Use a condição de associação IN para testar valoresem uma lista.
![Page 74: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/74.jpg)
2-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Condição LIKE
� Use a condição LIKE para executar pesquisascuringas de valores válidos de string de pesquisa.
� As condições de pesquisa podem conter caracteresliterais ou números:– % denota zero ou muitos caracteres.– _ denota um caractere.
SELECT first_nameFROM employeesWHERE first_name LIKE 'S%';
![Page 75: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/75.jpg)
2-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Você pode combinar caracteres de correspondênciade padrão.
� É possível usar o identificador ESCAPE para procurarpelos símbolos % e _.
Usando a Condição LIKE
SELECT last_nameFROM employeesWHERE last_name LIKE '_o%';
![Page 76: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/76.jpg)
2-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando as Condições NULL
Teste para valores nulos com o operador IS NULL.
SELECT last_name, manager_idFROM employeesWHERE manager_id IS NULL;
![Page 77: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/77.jpg)
2-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Condições Lógicas
Operador
AND
OR
NOT
Significado
Retorna TRUE se ambas as condiçõesde componentes forem verdadeiras
Retorna TRUE se uma das condiçõesde componente for verdadeira
Retorna TRUE se a condição seguintefor falsa
![Page 78: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/78.jpg)
2-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador AND
AND exige que ambas as condições sejam verdadeiras.
SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000AND job_id LIKE '%MAN%';
![Page 79: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/79.jpg)
2-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador OR
OR exige que uma das condições seja verdadeira.OR exige que uma das condições seja verdadeira.SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000OR job_id LIKE '%MAN%';
![Page 80: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/80.jpg)
2-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_idFROM employeesWHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
Usando o Operador NOT
![Page 81: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/81.jpg)
2-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Regras de Precedência
Sobreponha regras de precedência usando parênteses.
Ordem de Avaliação Operador 1 Operadores aritméticos
2 Operador de concatenação3 Condições de comparação4 IS [NOT] NULL, LIKE, [NOT] IN5 [NOT] BETWEEN
6 Condição lógica NOT7 Condição lógica AND8 Condição lógica OR
![Page 82: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/82.jpg)
2-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, salaryFROM employeesWHERE job_id = 'SA_REP'OR job_id = 'AD_PRES'AND salary > 15000;
Regras de Precedência
![Page 83: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/83.jpg)
2-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, salaryFROM employeesWHERE (job_id = 'SA_REP'OR job_id = 'AD_PRES')AND salary > 15000;
Regras de Precedência
Use parênteses para forçar a prioridade.Use parênteses para forçar a prioridade.
![Page 84: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/84.jpg)
2-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date;
Cláusula ORDER BY
� Classifique linhas com a cláusula ORDER BY� ASC: ordem crescente, default� DESC: ordem decrescente
� A cláusula ORDER BY aparece por último nainstrução SELECT.
�
![Page 85: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/85.jpg)
2-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Classificando em Ordem Decrescente
SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date DESC ;
�
![Page 86: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/86.jpg)
2-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Classificando por Apelido de Coluna
SELECT employee_id, last_name, salary*12 annsalFROM employeesORDER BY annsal;
�
![Page 87: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/87.jpg)
2-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� A ordem da lista ORDER BY é a ordem declassificação.
� Você pode classificar por uma coluna que não estejana lista SELECT.
SELECT last_name, department_id, salaryFROM employeesORDER BY department_id, salary DESC;
Classificando por Várias Colunas
�
![Page 88: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/88.jpg)
2-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
SELECT *|[DISTINCT] coluna|expressão [apelido],...}FROM tabela[WHERE condição(ões)][ORDER BY coluna, expr, apelido [ASC|DESC]];
Nesta lição, você aprendeu a:� Usar a cláusula WHERE para restringir linhas de saída
� Usar as condições de comparação� Usar as condições BETWEEN, IN, LIKE e NULL� Aplicar os operadores lógicos AND, OR e NOT
� Usar a cláusula ORDER BY para classificar linhasde saída
![Page 89: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/89.jpg)
2-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 2
Este exercício abrange os seguintes tópicos:� Selecionando dados e alterando a ordem das
linhas exibidas� Restringindo linhas usando a cláusula WHERE� Classificando linhas usando a cláusula ORDER BY
![Page 90: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/90.jpg)
3Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de uma Única Linha
![Page 91: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/91.jpg)
3-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever vários tipos de funções disponíveis
em SQL� Usar funções de data, número e caractere em
instruções SELECT� Descrever o uso das funções de conversão
![Page 92: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/92.jpg)
3-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções SQL
FunFunççãoão
A função executaa ação
Entrada
argarg 11
argarg 22
argarg nn
Saída
ValorValorresultanteresultante
![Page 93: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/93.jpg)
3-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Dois Tipos de Funções SQL
FunFunççõesões
FunFunççõesões dedeuma uma única linhaúnica linha
FunFunççõesões dedevvárias linhasárias linhas
![Page 94: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/94.jpg)
3-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de uma Única Linha
Funções de uma única linha:� Manipulam itens de dados� Aceitam argumentos e retornam um valor� Agem em cada linha retornada� Retornam um resultado por linha� Podem modificar o tipo de dados� Podem ser aninhadas� Aceitam argumentos que podem ser uma coluna
ou uma expressãonome_função [(arg1, arg2,...)]nome_função [(arg1, arg2,...)]
![Page 95: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/95.jpg)
3-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de uma Única Linha
ConversConversãoão
CaractereCaractere
NumNuméricaséricas
DataData
GeraisGeraisFunFunççõesões dede
uma uma única linhaúnica linha
![Page 96: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/96.jpg)
3-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de Caractere
FunFunççõesões dedecaracterecaractere
LOWER
UPPER
INITCAP
CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE
FunFunççõesões de de manipulamanipulaççãoão dedemaimaiúscúsc./min./minúscúsc..
FunFunççõesões de de manipulamanipulaççãoão dede
caracterescaracteres
![Page 97: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/97.jpg)
3-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Função Resultado
Funções de Manipulação deMaiúsculas e Minúsculas
Essas funções convertem letras maiúsculas em minúsculas e vice-versa nas strings de caracteres.
LOWER('SQL Course')
UPPER('SQL Course')
INITCAP('SQL Course')
sql course
SQL COURSE
Sql Course
![Page 98: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/98.jpg)
3-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Funções de Manipulaçãode Maiúsculas e Minúsculas
Exibir o número, o nome e o número do departamentodo funcionário Higgins:
SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selected
SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected
SELECT employee_id, last_name, department_idFROM employeesWHERE LOWER(last_name) = 'higgins';
![Page 99: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/99.jpg)
3-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CONCAT('Hello', 'World')
SUBSTR('HelloWorld',1,5)
LENGTH('HelloWorld')
INSTR('HelloWorld', 'W')
LPAD(salary,10,'*')
RPAD(salary, 10, '*')
TRIM('H' FROM 'HelloWorld')
HelloWorld
Hello
10
6
*****24000
24000*****
elloWorld
Função Resultado
Funções de Manipulação de Caracteres
Estas funções manipulam strings de caracteres:
![Page 100: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/100.jpg)
3-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM employees
WHERE SUBSTR(job_id, 4) = 'REP';
Usando as Funções deManipulação de Caracteres
1
31 2
32
![Page 101: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/101.jpg)
3-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções Numéricas
� ROUND: arredonda o valor para o decimal especificadoROUND(45.926, 2) 45.93
� TRUNC: trunca o valor para o decimal especificadoTRUNC(45.926, 2) 45.92
� MOD: retorna o resto da divisãoMOD(1600, 300) 100
![Page 102: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/102.jpg)
3-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.923,-1)
FROM DUAL;
Usando a Função ROUND
DUAL é uma tabela fictícia usada para exibir resultadosde funções e cálculos.
1 2
3
31 2
![Page 103: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/103.jpg)
3-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT TRUNC(45.923,2), TRUNC(45.923),TRUNC(45.923,-2)
FROM DUAL;
Usando a Função TRUNC
31 2
1 2
3
![Page 104: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/104.jpg)
3-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, salary, MOD(salary, 5000)FROM employeesWHERE job_id = 'SA_REP';
Usando a Função MOD
Calcule o que resta de um salário após dividi-lo por5.000 para todos os funcionários cujo cargo seja representante de vendas.
![Page 105: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/105.jpg)
3-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Trabalhando com Datas
� O banco de dados Oracle armazena datas em umformato de número interno: século, ano, mês, dia,horas, minutos, segundos.
� O formato de exibição de data default é DD-MON-RR.� Permite que você armazene datas do século 21 no
século 20 especificando apenas os dois últimosdígitos do ano.
� Permite que você armazene datas do século 20 no século 21 da mesma maneira.
SELECT last_name, hire_dateFROM employeesWHERE last_name like ''G%';';
![Page 106: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/106.jpg)
3-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Trabalhando com Datas
SYSDATE é uma função que retorna:� Data� Hora
![Page 107: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/107.jpg)
3-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Aritmética com Datas
� Adicionar ou subtrair um número de, ou para, umadata para um valor de data resultante.
� Subtrair duas datas para localizar o número de dias entre estas datas.
� Adicionar horas para uma data dividindo o númerode horas por 24.
![Page 108: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/108.jpg)
3-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando OperadoresAritméticos com Datas
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;
![Page 109: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/109.jpg)
3-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de Data
Número de mesesentre duas datasMONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
ROUND
TRUNC
Adiciona meses docalendário à dataDia seguinte à dataespecificada
Último dia do mês
Arredonda a data
Trunca a data
Função Descrição
![Page 110: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/110.jpg)
3-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
Usando Funções de Data
� ADD_MONTHS ('11-JAN-94',6)
� NEXT_DAY ('01-SEP-95','FRIDAY')
� LAST_DAY('01-SEP-95')
19.6774194
'11-JUL-94'
'08-SEP-95'
'28-FEB-95'
![Page 111: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/111.jpg)
3-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� ROUND(SYSDATE,'MONTH') 01-AUG-95
� ROUND(SYSDATE ,'YEAR') 01-JAN-96
� TRUNC(SYSDATE ,'MONTH') 01-JUL-95
� TRUNC(SYSDATE ,'YEAR') 01-JAN-95
Usando Funções de Data
Suponha que SYSDATE = '25-JUL-95':
![Page 112: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/112.jpg)
3-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exercício 3, Parte Um: Visão Geral
Este exercício abrange os seguintes tópicos:� Criando uma consulta que exibe a data atual � Criando consultas que exigem o uso de funções
numéricas, de caractere e de data� Executando cálculos de anos e meses de serviço de
um funcionário
![Page 113: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/113.jpg)
3-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de Conversão
ConversConversãoão dede tipotipo dededadosdados implimplícitaícita
ConversConversãoão dede tipotipo dededadosdados explexplícitaícita
ConversConversãoão dedetipotipo de dadosde dados
![Page 114: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/114.jpg)
3-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de Tipo de Dados Implícita
Nas designações, o servidor Oracle pode converter automaticamente o seguinte:
VARCHAR2 ou CHAR
De Em
VARCHAR2 ou CHAR
NUMBER
DATE
NUMBER
DATE
VARCHAR2
VARCHAR2
![Page 115: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/115.jpg)
3-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de Tipo de Dados Implícita
Na avaliação de expressões, o Oracle Server podeconverter automaticamente o seguinte:
VARCHAR2 ou CHAR
De Em
VARCHAR2 ou CHAR
NUMBER
DATE
![Page 116: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/116.jpg)
3-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de Tipo de Dados Explícita
NUMBER CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
![Page 117: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/117.jpg)
3-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de Tipo de Dados Explícita
NUMBER CHARACTER
TO_CHAR
TO_NUMBER
DATE
TO_CHAR
TO_DATE
![Page 118: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/118.jpg)
3-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função TO_CHAR com Datas
O modelo de formato:� Deve ser delimitado por aspas simples e fazer
distinção entre maiúsculas e minúsculas� Pode incluir qualquer elemento de formato de
data válido� Tem um elemento fm para remover espaços de
preenchimento ou suprimir zeros à esquerda� É separado do valor de data por uma vírgula
TO_CHAR(data, 'modelo_formato')TO_CHAR(data, 'modelo_formato')
![Page 119: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/119.jpg)
3-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
YYYY
Elementos do Modelo de Formato de Data
YEAR
MM
MONTH
DY
DAY
Ano completo em números
Ano por extenso
Valor de dois dígitos para o mês
Abreviação de três letras do dia da semana
Nome completo do dia da semana
Nome completo do mês
MON Abreviação de três letras do mês
DD Dia do mês numérico
![Page 120: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/120.jpg)
3-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Elementos do Modelo de Formato de Data
� Os elementos de hora formatam a parte de hora da data.
� Adicionar strings de caracteres colocando-as entres aspas.
� Os sufixos de número escrevem os números por extenso.
HH24:MI:SS AM 15:45:32 PM
DD "of" MONTH 12 of OCTOBER
ddspth fourteenth
![Page 121: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/121.jpg)
3-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função TO_CHAR com Datas
SELECT last_name,TO_CHAR(hire_date, 'fmDD Month YYYY')AS HIREDATE
FROM employees;
�
![Page 122: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/122.jpg)
3-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função TO_CHAR com Números
Estes são alguns dos elementos de formato que podem ser usados com a função TO_CHAR para exibirum valor numérico como um caractere:
TO_CHAR(número, 'modelo_formato')TO_CHAR(número, 'modelo_formato')
90$L.,
Representa um númeroForça a exibição de um zeroColoca um símbolo de dólar flutuanteUsa o símbolo da moeda local flutuanteImprime uma vírgula decimalImprime um indicador de milhar
![Page 123: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/123.jpg)
3-39 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';
Usando a Função TO_CHAR com Números
![Page 124: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/124.jpg)
3-40 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando as Funções TO_NUMBER e TO_DATE
� Converter uma string de caracteres em um formatode número usando a função TO_NUMBER:
� Converter uma string de caracteres em um formatode data usando a função TO_DATE:
� Essas funções têm um modificador fx. Esse modificador especifica a correspondência exata para o argumento de caractere e o modelo de formato de data de uma função TO_DATE
TO_NUMBER(caract[, 'modelo_formato'])TO_NUMBER(caract[, 'modelo_formato'])
TO_DATE(caract[, 'modelo_formato'])TO_DATE(caract[, 'modelo_formato'])
![Page 125: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/125.jpg)
3-41 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando as Funções TO_NUMBER e TO_DATE
� Converter uma string de caracteres em um formatode número usando a função TO_NUMBER:
� Converter uma string de caracteres em um formatode data usando a função TO_DATE:
� Essas funções têm um modificador fx. Esse modificador especifica a correspondência exata para o argumento de caractere e o modelo de formato de data de uma função TO_DATE
TO_NUMBER(caract[, 'modelo_formato'])TO_NUMBER(caract[, 'modelo_formato'])
TO_DATE(caract[, 'modelo_formato'])TO_DATE(caract[, 'modelo_formato'])
![Page 126: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/126.jpg)
3-42 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Formato de Data RR
Ano Atual1995199520012001
Data Especificada27-OCT-9527-OCT-1727-OCT-1727-OCT-95
Formato RR1995201720171995
Formato YY1995191720172095
Se os doisdígitos do ano atual forem:
0�49
0�49 50�99
50�99
A data retornada estará no século atualA data retornada estará no século seguinte
A data retornada estará no séculoanteriorA data retornada estará no século atual
Se o ano de dois dígitos especificado for:
![Page 127: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/127.jpg)
3-43 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Formato de Data RR
Para determinar os funcionários admitidos antes de 1990, use oformato RR, que produz os mesmos resultados independentemente de o comando serexecutado em 1999 ou agora:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')FROM employeesWHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');
![Page 128: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/128.jpg)
3-44 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Aninhando Funções
� As funções de uma única linha podem seraninhadas em qualquer nível.
� As funções aninhadas são avaliadas do nível mais interno para o mais externo.
F3(F2(F1(col,arg1),arg2),arg3)
Etapa 1 = Resultado 1
Etapa 2 = Resultado 2
Etapa 3 = Resultado 3
![Page 129: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/129.jpg)
3-45 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name,NVL(TO_CHAR(manager_id), 'No Manager')
FROM employeesWHERE manager_id IS NULL;
Aninhando Funções
![Page 130: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/130.jpg)
3-46 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções gerais
Essas funções operam com qualquer tipo de dados epertencem ao uso de valores nulos.� NVL (expr1, expr2)
� NVL2 (expr1, expr2, expr3)
� NULLIF (expr1, expr2)
� COALESCE (expr1, expr2, ..., exprn)
![Page 131: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/131.jpg)
3-47 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Função NVL
Converte um valor nulo em um valor real.� É possível usar os tipos de dados de data, de
caractere e de número.� Os tipos de dados devem corresponder a:
– NVL(commission_pct,0)
– NVL(hire_date,'01-JAN-97')
– NVL(job_id,'No Job Yet')
![Page 132: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/132.jpg)
3-48 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, salary, NVL(commission_pct, 0),(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;
Usando a Função NVL
�
1 2
12
![Page 133: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/133.jpg)
3-49 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, salary, commission_pct,NVL2(commission_pct,
'SAL+COMM', 'SAL') incomeFROM employees WHERE department_id IN (50, 80);
Usando a Função NVL2
1 2
12
![Page 134: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/134.jpg)
3-50 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT first_name, LENGTH(first_name) "expr1", last_name, LENGTH(last_name) "expr2",NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM employees;
Usando a Função NULLIF
�
1
23
1 2 3
![Page 135: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/135.jpg)
3-51 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função COALESCE
� A vantagem da função COALESCE em relação à função NVL é que ela pode apresentar diversos valores alternativos.
� Se a primeira expressão não for nula, a função retornará essa expressão; caso contrário, a função unirá as expressões restantes.
![Page 136: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/136.jpg)
3-52 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name,COALESCE(commission_pct, salary, 10) comm
FROM employeesORDER BY commission_pct;
Usando a Função COALESCE
�
![Page 137: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/137.jpg)
3-53 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Expressões Condicionais
� Propiciam o uso da lógica IF-THEN-ELSE em uma instrução SQL
� Use dois métodos:� Expressão CASE� Função DECODE
![Page 138: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/138.jpg)
3-54 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Expressão CASE
Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE:
CASE expr WHEN comparação_expr1 THEN retorna_expr1[WHEN comparação_expr2 THEN retorna_expr2WHEN comparação_exprn THEN retorna_exprnELSE else_expr]
END
CASE expr WHEN comparação_expr1 THEN retorna_expr1[WHEN comparação_expr2 THEN retorna_expr2WHEN comparação_exprn THEN retorna_exprnELSE else_expr]
END
![Page 139: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/139.jpg)
3-55 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, salary,CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salaryWHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED_SALARY"FROM employees;
Usando a Expressão CASE
Facilita as pesquisas condicionais funcionando como uma instrução IF-THEN-ELSE:
�
�
![Page 140: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/140.jpg)
3-56 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Função DECODE
Facilita as pesquisas condicionais funcionando como uma instrução CASE ou IF-THEN-ELSE
DECODE(col|expressão, pesquisa1, resultado1 [, pesquisa2, resultado2,...,][, default])
DECODE(col|expressão, pesquisa1, resultado1 [, pesquisa2, resultado2,...,][, default])
![Page 141: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/141.jpg)
3-57 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função DECODE
SELECT last_name, job_id, salary,DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,'SA_REP', 1.20*salary,
salary)REVISED_SALARY
FROM employees;
�
�
![Page 142: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/142.jpg)
3-58 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função DECODE
SELECT last_name, salary,DECODE (TRUNC(salary/2000, 0),
0, 0.00,1, 0.09,2, 0.20,3, 0.30,4, 0.40,5, 0.42,6, 0.44,
0.45) TAX_RATEFROM employeesWHERE department_id = 80;
Exibir a alíquota de imposto aplicável para cada funcionário do departamento 80.
![Page 143: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/143.jpg)
3-59 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Executar cálculos nos dados usando funções� Modificar itens de dados individuais usando funções� Manipular a saída para grupos de linhas usando
funções� Alterar formatos de data para exibição usando funções� Converter tipos de dados de coluna usando funções� Usar funções NVL� Usar a lógica IF-THEN-ELSE
![Page 144: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/144.jpg)
3-60 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exercício 3, Parte Dois: Visão Geral
Este exercício abrange os seguintes tópicos:� Criando consultas que exigem o uso de funções
numéricas, de caractere e de data� Usando a concatenação com funções� Criando consultas que diferenciam entre letras
maiúsculas e minúsculas para testar a utilidade das funções de caractere
� Executando cálculos de anos e meses de serviço de um funcionário
� Determinando a data de revisão para um funcionário
![Page 145: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/145.jpg)
4Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exibindo Dados de Várias Tabelas
![Page 146: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/146.jpg)
4-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Criar instruções SELECT para obter acesso a dados
de mais de uma tabela usando eqüijunções e não-eqüijunções
� Exibir dados que, em geral, não correspondem auma condição de junção usando junções externas
� Unir uma tabela a ela mesma por meio de umaautojunção
![Page 147: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/147.jpg)
4-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Obtendo Dados de Várias Tabelas
EMPLOYEES DEPARTMENTS
�
�
![Page 148: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/148.jpg)
4-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Produtos Cartesianos
� Um produto cartesiano será formado quando:� Uma condição de junção for omitida.� Uma condição de junção for inválida.� Todas as linhas da primeira tabela forem unidas a
todas as linhas da segunda tabela.� Para evitar um produto Cartesiano, sempre inclua uma
condição de junção válida em uma cláusula WHERE.
![Page 149: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/149.jpg)
4-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Gerando um Produto Cartesiano
Produtocartesiano:
20x8=160 linhas
EMPLOYEES (20 linhas) DEPARTMENTS (8 linhas)
�
�
![Page 150: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/150.jpg)
4-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Eqüijunção� Não-eqüijunção� Junção externa� Autojunção
Tipos de Junções
� Junções híbridas� Junções naturais� Cláusula Using� Junções externas de
dois lados ou completas� Condições de junção
arbitrárias para junçõesexternas
Junções Compatíveis como SQL: 1999:Junções Compatíveis como SQL: 1999:
Junções Patenteadas pelaOracle (8i e anterior):Junções Patenteadas pelaOracle (8i e anterior):
![Page 151: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/151.jpg)
4-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Unindo Tabelas Usando a Sintaxe Oracle
Usar uma junção para consultar dados de uma ou maistabelas.
� Crie uma condição de junção na cláusula WHERE.� Coloque o nome da tabela antes do nome da coluna
quando aparecer o mesmo nome de coluna em maisde uma tabela.
SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;
SELECT tabela1.coluna, tabela2.colunaFROM tabela1, tabela2WHERE tabela1.coluna1 = tabela2.coluna2;
![Page 152: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/152.jpg)
4-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Que é uma Eqüijunção?EMPLOYEES DEPARTMENTS
Chave estrangeira
Chave primária
� �
![Page 153: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/153.jpg)
4-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_idFROM employees, departmentsWHERE employees.department_id = departments.department_id;
Recuperando Registros com Eqüijunções
�
![Page 154: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/154.jpg)
4-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Condições de Pesquisa AdicionaisUsando o Operador AND
EMPLOYEES DEPARTMENTS
� �
![Page 155: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/155.jpg)
4-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Qualificando Nomes de Colunas Ambíguos
� Use prefixos de tabela para qualificar nomes decolunas que estão em várias tabelas.
� Melhore o desempenho usando prefixos de tabela.� Diferencie colunas que possuem nomes idênticos,
mas que residam em tabelas diferentes usandoapelidos de coluna.
![Page 156: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/156.jpg)
4-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;
Usando Apelidos de Tabela
� Simplifique consultas usando apelidos de tabela.� Melhore o desempenho usando prefixos de tabela.
![Page 157: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/157.jpg)
4-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Unindo Mais de Duas TabelasEMPLOYEES LOCATIONSDEPARTMENTS
� Para unir n tabelas, é necessário um mínimo de n-1condições de junção. Por exemplo, para unir trêstabelas, é necessário um mínimo de duas junções.
�
![Page 158: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/158.jpg)
4-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Não-eqüijunções
EMPLOYEES JOB_GRADES
Os salários na tabelaEMPLOYEES devem estarentre o menor e o maiorsalário da tabelaJOB_GRADES
�
![Page 159: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/159.jpg)
4-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Recuperando Registros com Não-eqüijunções
SELECT e.last_name, e.salary, j.grade_levelFROM employees e, job_grades jWHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
�
![Page 160: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/160.jpg)
4-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Junções Externas
EMPLOYEESDEPARTMENTS
Não há funcionários nodepartamento 190.
�
![Page 161: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/161.jpg)
4-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Sintaxe de Junções Externas
� Usar uma junção externa para ver também todas aslinhas que não atendem à condição de junção.
� O operador de junção externa é o sinal de mais (+).
SELECT tabela1.coluna, tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna(+) = tabela2.coluna;
SELECT tabela1.coluna, tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna(+) = tabela2.coluna;
SELECT tabela1.coluna, tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna = tabela2.coluna(+);
SELECT tabela1.coluna, tabela2.coluna
FROM tabela1, tabela2
WHERE tabela1.coluna = tabela2.coluna(+);
![Page 162: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/162.jpg)
4-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id ;
Usando Junções Externas
�
![Page 163: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/163.jpg)
4-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Autojunções
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)
MANAGER_ID na tabela WORKER é iguala EMPLOYEE_ID na tabela MANAGER.
� �
![Page 164: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/164.jpg)
4-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Unindo uma Tabela a ela Mesma
SELECT worker.last_name || ' works for '
|| manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;
�
![Page 165: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/165.jpg)
4-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exercício 4, Parte Um: Visão Geral
Este exercício aborda a criação de consultas para unirtabelas usando a sintaxe Oracle.
![Page 166: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/166.jpg)
4-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Unindo Tabelas Usando a Sintaxe SQL: 1999
Usar uma junção para consultar dados de uma ou maistabelas.
SELECT tabela1.coluna, tabela2.colunaFROM tabela1[CROSS JOIN tabela2] |[NATURAL JOIN tabela2] |[JOIN tabela2 USING (nome_coluna)] |[JOIN tabela2 ON(tabela1.nome_coluna = tabela2.nome_coluna)] |[LEFT|RIGHT|FULL OUTER JOIN tabela2 ON (tabela1.nome_coluna = tabela2.nome_coluna)];
SELECT tabela1.coluna, tabela2.colunaFROM tabela1[CROSS JOIN tabela2] |[NATURAL JOIN tabela2] |[JOIN tabela2 USING (nome_coluna)] |[JOIN tabela2 ON(tabela1.nome_coluna = tabela2.nome_coluna)] |[LEFT|RIGHT|FULL OUTER JOIN tabela2 ON (tabela1.nome_coluna = tabela2.nome_coluna)];
![Page 167: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/167.jpg)
4-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Junções Híbridas
� A cláusula CROSS JOIN cria o produto híbrido deduas tabelas.
� Esse processo equivale ao produto cartesianoentre as duas tabelas.
SELECT last_name, department_name FROM employeesCROSS JOIN departments ;
�
![Page 168: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/168.jpg)
4-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Junções Naturais
� A cláusula NATURAL JOIN baseia-se em todas ascolunas com o mesmo nome nas duas tabelas.
� Ela seleciona linhas das duas tabelas que têm valoresiguais em todas as colunas correspondentes.
� Se as colunas com os mesmos nomes tiverem tiposde dados diferentes, será retornado um erro.
![Page 169: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/169.jpg)
4-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT department_id, department_name, location_id, cityFROM departments NATURAL JOIN locations ;
Recuperando Registros comJunções Naturais
![Page 170: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/170.jpg)
4-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Junções com a Cláusula USING
� Se várias colunas tiverem os mesmos nomes masse os tipos de dados não forem correspondentes, acláusula NATURAL JOIN poderá ser modificada com acláusula USING para especificar as colunas que devemser usadas em uma eqüijunção.
� Usar a cláusula USING para estabelecer acorrespondência com apenas uma coluna quandomais de uma coluna for correspondente.
� Não usar um apelido ou nome de tabela nas colunasàs quais foram feitas referências.
� As cláusulas NATURAL JOIN e USING são mutuamenteexcludentes.
![Page 171: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/171.jpg)
4-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;
Recuperando Registros coma Cláusula USING
�
![Page 172: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/172.jpg)
4-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Junções com a Cláusula ON
� A condição da junção natural é basicamente umaeqüijunção de todas as colunas com o mesmo nome.
� Para especificar condições arbitrárias ou colunas aserem unidas, é usada a cláusula ON.
� A condição de junção é separada de outras condiçõesde pesquisa.
� A cláusula ON facilita a compreensão do código.
![Page 173: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/173.jpg)
4-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id) ;
Recuperando Registros coma Cláusula ON
�
![Page 174: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/174.jpg)
4-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Junções Triplas coma Cláusula ON
SELECT employee_id, city, department_name FROM employees e JOIN departments dON d.department_id = e.department_id JOIN locations lON d.location_id = l.location_id;
�
![Page 175: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/175.jpg)
4-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Junções INNER Versus OUTER
� Na sintaxe SQL: 1999, a junção de duas tabelas queretorna apenas linhas correspondentes é uma junçãointerna.
� Uma junção entre duas tabelas que retorna osresultados da junção interna assim como linhas nãocorrespondentes em tabelas esquerdas (ou direitas)é uma junção externa esquerda (ou direita).
� Uma junção entre duas tabelas que retorna osresultados de uma junção interna assim como osresultados de uma junção esquerda ou direita é umajunção externa completa.
![Page 176: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/176.jpg)
4-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_nameFROM employees e LEFT OUTER JOIN departments dON (e.department_id = d.department_id) ;
LEFT OUTER JOIN
�
![Page 177: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/177.jpg)
4-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_nameFROM employees e RIGHT OUTER JOIN departments dON (e.department_id = d.department_id) ;
RIGHT OUTER JOIN
�
![Page 178: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/178.jpg)
4-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.last_name, e.department_id, d.department_nameFROM employees e FULL OUTER JOIN departments dON (e.department_id = d.department_id) ;
FULL OUTER JOIN
�
![Page 179: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/179.jpg)
4-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id)AND e.manager_id = 149 ;
Condições Adicionais
![Page 180: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/180.jpg)
4-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a usar junções para exibir osdados de várias tabelas na:� Sintaxe patenteada pela Oracle para versões 8i e
anteriores� Sintaxe compatível com SQL: 1999 para a versão 9i
![Page 181: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/181.jpg)
4-38 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exercício 4, Parte Dois: Visão Geral
Este exercício abrange os seguintes tópicos:� Unindo tabelas usando uma eqüijunção� Efetuando junções externas e autojunções� Adicionando condições
![Page 182: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/182.jpg)
5Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Agregando DadosUsando Funções de Grupo
![Page 183: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/183.jpg)
5-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Identificar as funções de grupo disponíveis� Descrever o uso de funções de grupo� Agrupar dados usando a cláusula GROUP BY� Incluir ou excluir linhas agrupadas usando a cláusula
HAVING
![Page 184: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/184.jpg)
5-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que são Funções de Grupo?As funções de grupo operam em conjuntos de linhaspara fornecer um resultado por grupo.EMPLOYEES
O salário máximo na tabelaEMPLOYEES.
�
![Page 185: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/185.jpg)
5-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de Funções de Grupo
� AVG
� COUNT
� MAX
� MIN
� STDDEV
� SUM
� VARIANCE
![Page 186: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/186.jpg)
5-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT [coluna,] função_de_grupo(coluna), ...FROM tabela[WHERE condição][GROUP BY coluna][ORDER BY coluna];
Sintaxe de Funções de Grupo
![Page 187: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/187.jpg)
5-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%';
Usando as Funções AVG e SUM
Você pode usar AVG e SUM para dados numéricos.
![Page 188: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/188.jpg)
5-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando as Funções MIN e MAX
Você pode usar MIN e MAX para qualquer tipo de dados.
SELECT MIN(hire_date), MAX(hire_date)FROM employees;
![Page 189: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/189.jpg)
5-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT COUNT(*)FROM employeesWHERE department_id = 50;
Usando a Função COUNT
COUNT(*) retorna o número de linhas em uma tabela.
![Page 190: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/190.jpg)
5-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Função COUNT
� COUNT(expr) retorna o número de linhas comvalores não-nulos para a expr.
� Exiba o número de valores de departamento natabela EMPLOYEES, excluindo os valores nulos.
SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;
![Page 191: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/191.jpg)
5-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT COUNT(DISTINCT department_id)FROM employees;
Usando a Palavra-Chave DISTINCT
� COUNT(DISTINCT expr) retorna o número devalores não-nulos distintos da expr.
� Exiba o número de valores de departamentodistintos na tabela EMPLOYEES.
![Page 192: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/192.jpg)
5-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT AVG(commission_pct)FROM employees;
Funções de Grupo e Valores Nulos
As funções de grupo ignoram valores nulos na coluna.
![Page 193: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/193.jpg)
5-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT AVG(NVL(commission_pct, 0))FROM employees;
Usando a Função NVL comFunções de Grupo
A função NVL força as funções de grupo a incluíremvalores nulos.
![Page 194: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/194.jpg)
5-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Grupos de Dados
EMPLOYEES
O saláriomédio
na tabela
EMPLOYEESpara cada
departamento.
4400
�
9500
3500
6400
10033
![Page 195: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/195.jpg)
5-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT coluna, função_de_grupo(coluna)FROM tabela[WHERE condição][GROUP BY expressão_group_by][ORDER BY coluna];
Criando Grupos de Dados:A Sintaxe da Cláusula GROUP BY
Divida linhas de uma tabela em grupos menores usandoa cláusula GROUP BY.
![Page 196: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/196.jpg)
5-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id;
Usando a Cláusula GROUP BY
Todas as colunas da lista SELECT que não estejam emfunções de grupo devem estar na cláusula GROUP BY.
![Page 197: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/197.jpg)
5-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Cláusula GROUP BY
A coluna GROUP BY não precisa estar na lista SELECT.
SELECT AVG(salary)FROM employeesGROUP BY department_id;
![Page 198: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/198.jpg)
5-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Agrupando por mais de uma Coluna
EMPLOYEES
Adicione os salários na
tabelaEMPLOYEES
paracada cargo,
agrupado por departamento.�
![Page 199: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/199.jpg)
5-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ;
Usando a Cláusula GROUP BYem Várias Colunas
![Page 200: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/200.jpg)
5-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consultas InválidasUsando Funções de Grupo
Qualquer coluna ou expressão na lista SELECT quenão seja uma função agregada deve estar na cláusulaGROUP BY.
SELECT department_id, COUNT(last_name)FROM employees;
SELECT department_id, COUNT(last_name)FROM employees;
SELECT department_id, COUNT(last_name) *ERROR at line 1:ORA-00937: not a single-group group function
SELECT department_id, COUNT(last_name) *ERROR at line 1:ORA-00937: not a single-group group function
Coluna ausente na cláusula GROUP BYColuna ausente na cláusula GROUP BY
![Page 201: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/201.jpg)
5-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consultas InválidasUsando Funções de Grupo
� Não é possível usar a cláusula WHERE para restringirgrupos.
� Use a cláusula HAVING para restringir grupos.� Não é possível usar funções de grupo na cláusula
WHERE.SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;
SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;
WHERE AVG(salary) > 8000 *ERROR at line 3:ORA-00934: group function is not allowed here
WHERE AVG(salary) > 8000 *ERROR at line 3:ORA-00934: group function is not allowed here
Não é possível usar a cláusula WHERE para restringir gruposNão é possível usar a cláusula WHERE para restringir grupos
![Page 202: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/202.jpg)
5-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Excluindo Resultados do Grupo
O saláriomáximo por
departamentoquando formaior queUS$ 10.000
EMPLOYEES
�
![Page 203: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/203.jpg)
5-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT coluna, função_de_grupoFROM tabela[WHERE condição][GROUP BY expressão_group_by][HAVING condição_de_grupo][ORDER BY coluna];
Excluindo Resultados do Grupo:A Cláusula HAVING
Use a cláusula HAVING para restringir grupos:1. As linhas são agrupadas.2. A função de grupo é aplicada.3. Os grupos que correspondem à cláusula HAVING
são exibidos.
![Page 204: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/204.jpg)
5-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Cláusula HAVING
SELECT department_id, MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)>10000 ;
![Page 205: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/205.jpg)
5-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary);
Usando a Cláusula HAVING
![Page 206: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/206.jpg)
5-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Aninhando Funções de Grupo
Exiba o salário médio máximo.
SELECT MAX(AVG(salary))FROM employeesGROUP BY department_id;
![Page 207: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/207.jpg)
5-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT coluna, função_de_grupo(coluna)FROM tabela[WHERE condição][GROUP BY expressão_group_by][HAVING condição_de_grupo][ORDER BY coluna];
Resumo
Nesta lição, você aprendeu a:� Usar as funções de grupo COUNT, MAX, MIN e AVG� Criar consultas que usem a cláusula GROUP BY� Criar consultas que usem a cláusula HAVING
![Page 208: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/208.jpg)
5-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 5
Este exercício abrange os seguintes tópicos:� Criando consultas que usem as funções de grupo� Agrupando por linhas para obter mais de um resultado� Excluindo grupos usando a cláusula HAVING
![Page 209: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/209.jpg)
6Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas
![Page 210: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/210.jpg)
6-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever os tipos de problemas que as subconsultas
podem resolver� Definir as subconsultas� Listar os tipos de subconsultas� Criar subconsultas de uma única linha e de várias
linhas
![Page 211: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/211.jpg)
6-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Subconsultapara Resolver um Problema
Quem tem um salário maior que o de Abel?
Que funcionários têm salários maioresque o de Abel?
Consulta Principal:
??
Qual é o salário de Abel???
Subconsulta
![Page 212: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/212.jpg)
6-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT lista_de_seleçãoFROM tabelaWHERE operador expr
(SELECT lista_de_seleção FROM tabela);
Sintaxe de Subconsulta
� A subconsulta (consulta interna) é executada umavez antes da consulta principal.
� O resultado da subconsulta é usado pela consultaprincipal (consulta externa).
![Page 213: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/213.jpg)
6-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_nameFROM employeesWHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');
Usando uma Subconsulta
11000
![Page 214: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/214.jpg)
6-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Diretrizes para o Uso de Subconsultas
� Coloque as subconsultas entre parênteses.� Coloque as subconsultas no lado direito da condição
de comparação.� A cláusula ORDER BY na subconsulta não é necessária,
a menos que você esteja executando a análise Top-N.� Use operadores de uma única linha com subconsultas
de uma única linha e use operadores de várias linhascom subconsultas de várias linhas.
![Page 215: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/215.jpg)
6-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de Subconsultas
ST_CLERK
� Subconsulta de várias linhas
ST_CLERKSA_MAN
Consulta principal
Subconsulta retorna
� Subconsulta de uma única linhaConsulta principal
Subconsulta retorna
![Page 216: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/216.jpg)
6-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas de uma Única Linha
� Retorne somente uma linha� Use operadores de comparação de uma única linha
Operador
=
>
>=
<
<=
<>
Significado
Igual a
Maior que
Maior que ou igual a
Menor que
Menor que ou igual a
Diferente de
![Page 217: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/217.jpg)
6-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, salaryFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141)AND salary > (SELECT salary FROM employees WHERE employee_id = 143) ;
Executando Subconsultasde uma Única Linha
ST_CLERK
2600
![Page 218: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/218.jpg)
6-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);
Usando Funções de Grupoem uma Subconsulta
2500
![Page 219: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/219.jpg)
6-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Cláusula HAVING com Subconsultas
� O servidor Oracle executa primeiro as subconsultas.� O servidor Oracle retorna os resultados para a
cláusula HAVING da consulta principal.
SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);
2500
![Page 220: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/220.jpg)
6-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_nameFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);
O que há de Erradocom esta Instrução?
ERROR at line 4:ORA-01427: single-row subquery returns more than one row
ERROR at line 4:ORA-01427: single-row subquery returns more than one row
Operador de uma única linha com subconsulta devárias linhasOperador de uma única linha com subconsulta devárias linhas
![Page 221: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/221.jpg)
6-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Esta Instrução Retornará Linhas?
no rows selectedno rows selected
SELECT last_name, job_idFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas');
A subconsulta não retorna nenhum valorA subconsulta não retorna nenhum valor
![Page 222: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/222.jpg)
6-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas de Várias Linhas
� Retorne mais de uma linha� Use operadores de comparação de várias linhas
Operador
IN
ANY
ALL
Significado
Igual a qualquer membro da lista
Compare o valor a cada valor retornadopela subconsulta
Compare o valor a todo valor retornadopela subconsulta
![Page 223: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/223.jpg)
6-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';
Usando o Operador ANY emSubconsultas de Várias Linhas
9000, 6000, 4200
�
![Page 224: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/224.jpg)
6-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';
Usando o Operador ALL emSubconsultas de Várias Linhas
9000, 6000, 4200
![Page 225: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/225.jpg)
6-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Valores Nulos em uma Subconsulta
SELECT emp.last_nameFROM employees empWHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);
no rows selectedno rows selected
![Page 226: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/226.jpg)
6-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT lista_de_seleçãoFROM tabelaWHERE operador expr
(SELECT lista_de_seleção FROM tabela);
Resumo
Nesta lição, você aprendeu a:� Identificar quando uma subconsulta pode ajudar a
resolver um problema� Criar subconsultas quando uma consulta se basear
em valores desconhecidos
![Page 227: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/227.jpg)
6-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 6
Este exercício abrange os seguintes tópicos:� Criando subconsultas para valores de consulta com
base em critérios desconhecidos� Usando subconsultas para descobrir quais valores
existem em um conjunto de dados e não em outro
![Page 228: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/228.jpg)
7Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Produzindo uma Saída quePode Ser Lida com o iSQL*Plus
![Page 229: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/229.jpg)
7-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Produzir consultas que exijam uma variável de
substituição� Personalizar o ambiente do iSQL*Plus� Produzir saídas mais legíveis� Criar e executar arquivos de script
![Page 230: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/230.jpg)
7-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Variáveis de Substituição
Desejo executar umaconsulta com valoresdiferentes.... salary = ? �
� department_id = ? �... last_name = ? ...
Usuário
![Page 231: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/231.jpg)
7-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Variáveis de Substituição
Use as variáveis de substituição do iSQL*Plus para:� Armazenar valores temporariamente
� "E" comercial simples (&)� "E" comercial duplo (&&)� Comando DEFINE
� Passar os valores das variáveis entre asinstruções SQL
� Alterar cabeçalhos e rodapés dinamicamente
![Page 232: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/232.jpg)
7-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Variável de Substituição &Usando a Variável de Substituição &
Use uma variável precedida de um "e" comercial (&) parasolicitar um valor ao usuário.Use uma variável precedida de um "e" comercial (&) parasolicitar um valor ao usuário.SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num;
![Page 233: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/233.jpg)
7-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Variável de Substituição &Usando a Variável de Substituição &
1
2101
![Page 234: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/234.jpg)
7-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, department_id, salary*12FROM employeesWHERE job_id = '&job_title' ;
Valores de Caractere e Datacom Variáveis de Substituição
Use aspas simples para valores de data e de caractere.
![Page 235: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/235.jpg)
7-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Especificando Nomes de Colunas,Expressões e Textos
Use variáveis de substituição para complementaro seguinte:� Condições WHERE� Cláusulas ORDER BY� Expressões de coluna� Nomes de tabela� Instruções SELECT inteiras
![Page 236: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/236.jpg)
7-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Especificando Nomes de Colunas,Expressões e Textos
SELECT employee_id, last_name, job_id, &column_nameFROM employeesWHERE &conditionORDER BY &order_column ;
![Page 237: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/237.jpg)
7-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definindo Variáveis de Substituição
� Você pode predefinir variáveis usando o comandoDEFINE do iSQL*Plus.
DEFINE variável = valor cria uma variável deusuário com o tipo de dados CHAR.
� Se você precisar predefinir uma variável que incluaespaços, deverá colocar o valor entre aspas simplesquando usar o comando DEFINE.
� Uma variável definida está disponível para a sessão.
![Page 238: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/238.jpg)
7-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comandos DEFINE e UNDEFINE
� A variável permanece definida até você:� Usar o comando UNDEFINE para removê-la� Sair do iSQL*Plus
� Você pode verificar suas alterações com o comandoDEFINE.
DEFINE job_title = IT_PROGDEFINE job_titleDEFINE JOB_TITLE = "IT_PROG" (CHAR)
UNDEFINE job_titleDEFINE job_titleSP2-0135: symbol job_title is UNDEFINED
![Page 239: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/239.jpg)
7-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num;
Usando o Comando DEFINE coma Variável de Substituição &
� Crie a variável de substituição usando o comandoDEFINE.
� Use a variável precedida de um "e" comercial (&)para substituir o valor na instrução SQL.
DEFINE employee_num = 200
![Page 240: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/240.jpg)
7-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, &&column_nameFROM employeesORDER BY &column_name;
Use o "e" comercial duplo (&&) para reutilizar o valorda variável sem precisar solicitar sempre um valor aousuário.
�
Usando a Variável de Substituição &&
![Page 241: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/241.jpg)
7-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
old 3: WHERE employee_id = &employee_numnew 3: WHERE employee_id = 200
Usando o Comando VERIFY
Use o comando VERIFY para alternar a exibição davariável de substituição, antes e depois de o iSQL*Plustrocar as variáveis de substituição por valores.SET VERIFY ONSELECT employee_id, last_name, salary, department_idFROM employeesWHERE employee_id = &employee_num;
![Page 242: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/242.jpg)
7-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Personalizando o Ambiente do iSQL*Plus
� Use os comandos SETSET para controlar a sessão atual.
� Verifique o que você definiu usando o comando SHOWSHOW.
SET ECHO ONSET ECHO ON
SHOW ECHOecho ON
SHOW ECHOecho ONecho ON
SET variável_sistema valor SET variável_sistema valor
![Page 243: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/243.jpg)
7-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Variáveis do Comando SET
� ARRAYSIZE {20 | n}
� FEEDBACK {6 | n |OFF | ON}
� HEADING {OFF | ON}
� LONG {80 | n| ON | texto}
SET HEADING OFFSET HEADING OFF
SHOW HEADINGHEADING OFF
SHOW HEADINGHEADING OFFHEADING OFF
![Page 244: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/244.jpg)
7-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comandos de Formato do iSQL*Plus
� COLUMN [opção da coluna]� TTITLE [texto | OFF | ON]� BTITLE [texto | OFF | ON]� BREAK [ON elemento_relatório]
![Page 245: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/245.jpg)
7-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Comando COLUMN
Controla a exibição de uma coluna:
� CLE[AR]: remove todos os formatos de coluna� HEA[DING] texto: define o cabeçalho da coluna� FOR[MAT] formato: altera a exibição da coluna
usando um modelo de formato� NOPRINT | PRINT
� NULL
COL[UMN] [{coluna|apelido} [opção]]COL[UMN] [{coluna|apelido} [opção]]
![Page 246: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/246.jpg)
7-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Comando COLUMN
� Crie cabeçalhos de coluna.
COLUMN last_name HEADING 'Employee|Name' COLUMN salary JUSTIFY LEFT FORMAT $99,990.00COLUMN manager FORMAT 999999999 NULL 'No manager'
COLUMN last_name HEADING 'Employee|Name' COLUMN salary JUSTIFY LEFT FORMAT $99,990.00COLUMN manager FORMAT 999999999 NULL 'No manager'
COLUMN last_nameCOLUMN last_name
COLUMN last_name CLEAR COLUMN last_name CLEAR
� Exiba a definição atual da coluna LAST_NAME.
� Remova as definições da coluna LAST_NAME.
![Page 247: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/247.jpg)
7-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Modelos de Formato COLUMN
Resultado
1234
001234
$1234
L1234
1234.00
1,234
Exemplo
999999
099999
$9999
L9999
9999.99
9,999
Elemento
9
0
$
L
.
,
Descrição
Dígito de supressão de umúnico zero
Aplica o zero à esquerda
Símbolo de dólar flutuante
Moeda local
Posição do ponto decimal
Separador de milhar
![Page 248: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/248.jpg)
7-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Comando BREAK
Use o comando BREAK para suprimir duplicatas.
BREAK ON job_idBREAK ON job_id
![Page 249: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/249.jpg)
7-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando os Comandos TTITLE e BTITLE
� Exibir cabeçalhos e rodapés.
� Definir o cabeçalho do relatório.
� Definir o rodapé do relatório.
TTI[TLE] [texto|OFF|ON]TTI[TLE] [texto|OFF|ON]
TTITLE 'Salary|Report'TTITLE 'Salary|Report'
BTITLE 'Confidential'BTITLE 'Confidential'
![Page 250: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/250.jpg)
7-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando um Arquivo de Scriptpara Executar um Relatório
1. Crie e teste a instrução SQL SELECT.2. Salve a instrução SELECT em um arquivo de script.3. Carregue o arquivo de script em um editor.4. Adicione comandos de formatação antes da instrução
SELECT.5. Verifique se o caractere de finalização está situado
após a instrução SELECT.
![Page 251: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/251.jpg)
7-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando um Arquivo de Scriptpara Executar um Relatório
6. Remova os comandos de formatação depois dainstrução SELECT.
7. Salve o arquivo de script.8. Carregue o arquivo de script na janela de texto doiSQL*Plus e clique no botão Execute (Executar).
![Page 252: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/252.jpg)
7-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Relatório
�
![Page 253: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/253.jpg)
7-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Relatório
�
![Page 254: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/254.jpg)
7-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Usar as variáveis de substituição do iSQL*Plus para
armazenar valores temporariamente� Usar os comandos SET para controlar o ambiente
atual do iSQL*Plus� Usar o comando COLUMN para controlar a exibição de
uma coluna� Usar o comando BREAK para suprimir duplicações e
dividir linhas em seções� Usar os comandos TTITLE e BTITLE para exibir
cabeçalhos e rodapés
![Page 255: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/255.jpg)
7-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 7
Este exercício abrange os seguintes tópicos:� Criando uma consulta para exibir valores usando
variáveis de substituição� Iniciando um arquivo de comando contendo variáveis
![Page 256: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/256.jpg)
8Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Manipulando Dados
![Page 257: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/257.jpg)
8-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever cada instrução DML� Inserir linhas em uma tabela� Atualizar linhas em uma tabela� Deletar linhas de uma tabela� Intercalar linhas em uma tabela� Controlar transações
![Page 258: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/258.jpg)
8-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
DML (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 consiste em um conjunto deinstruções DML que formam uma unidade lógicade trabalho.
![Page 259: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/259.jpg)
8-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando uma Nova Linha a uma Tabela
DEPARTMENTSNovalinha
�insira uma novalinha na tabela DEPARTMENTS�
![Page 260: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/260.jpg)
8-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Sintaxe da Instrução INSERT
� Adicione novas linhas a uma tabela usando ainstrução INSERT.
� Somente uma linha é inserida por vez com esta sintaxe.
INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);
INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);
![Page 261: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/261.jpg)
8-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Inserindo Novas Linhas
� Insira uma nova linha contendo valores para cada coluna.
� Liste valores na ordem default das colunas na tabela.
� Opcionalmente, liste as colunas na cláusula INSERT.
� Coloque os valores de data e de caractere entre aspas simples.
INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);1 row created.
![Page 262: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/262.jpg)
8-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT INTO departmentsVALUES (100, 'Finance', NULL, NULL);1 row created.1 row created.
INSERT INTO departments (department_id, department_name )
VALUES (30, 'Purchasing');1 row created.1 row created.
Inserindo Linhas com Valores Nulos
� Método implícito: omite a coluna da lista de colunas.
� Método explícito: especifica a palavra-chave NULLna cláusula VALUES.
![Page 263: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/263.jpg)
8-8 Copyright © Oracle Corporation, 2001. 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, 100);
1 row created.1 row created.
Inserindo Valores Especiais
A função SYSDATE registra a data e a hora atuais.
![Page 264: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/264.jpg)
8-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT INTO employeesVALUES (114,
'Den', 'Raphealy','DRAPHEAL', '515.127.4561',TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),'AC_ACCOUNT', 11000, NULL, 100, 30);
1 row created.1 row created.
Inserindo Valores de Data Específicos
� Adicione um novo funcionário.
� Verifique sua adição.
![Page 265: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/265.jpg)
8-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES (&department_id, '&department_name',&location);
Criando um Script
� Use a variável de substituição & em uma instruçãoSQL para solicitar valores.
� & é um marcador de espaço para o valor da variável.
1 row created.1 row created.
![Page 266: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/266.jpg)
8-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Crie sua instrução INSERT com uma subconsulta.
� Não use a cláusula VALUES.� Estabeleça a correspondência entre o número de
colunas da cláusula INSERT e o da subconsulta.
INSERT INTO sales_reps(id, name, salary, commission_pct)SELECT employee_id, last_name, salary, commission_pctFROM employeesWHERE job_id LIKE '%REP%';
4 rows created.4 rows created.
Copiando Linhas de Outra Tabela
![Page 267: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/267.jpg)
8-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Alterando os Dados em uma Tabela
EMPLOYEES
Atualize linhas na tabela EMPLOYEES.
![Page 268: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/268.jpg)
8-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Sintaxe da Instrução UPDATE
� Modifique linhas existentes com a instrução UPDATE.
� Atualize mais de uma linha por vez, se necessário.
UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];
UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];
![Page 269: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/269.jpg)
8-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Uma ou mais linhas específicas serão modificadasse você especificar a cláusula WHERE.
� Se você omitir a cláusula WHERE, todas as linhas da tabela serão modificadas.
UPDATE employeesSET department_id = 70WHERE employee_id = 113;1 row updated.1 row updated.
Atualizando Linhas em uma Tabela
UPDATE copy_empSET department_id = 110;22 rows updated.
UPDATE copy_empSET department_id = 110;22 rows updated.22 rows updated.
![Page 270: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/270.jpg)
8-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE employeesSET job_id = (SELECT job_id
FROM employeesWHERE employee_id = 205),
salary = (SELECT salary FROM employeesWHERE employee_id = 205)
WHERE employee_id = 114;1 row updated.1 row updated.
Atualizando Duas Colunascom uma Subconsulta
Atualize o cargo e o salário do funcionário 114 para quecorrespondam aos do funcionário 205.
![Page 271: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/271.jpg)
8-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE copy_empSET department_id = (SELECT department_id
FROM employeesWHERE employee_id = 100)
WHERE job_id = (SELECT job_idFROM employeesWHERE employee_id = 200) ;
1 row updated.1 row updated.
Atualizando Linhas com Baseem Outra Tabela
Use subconsultas nas instruções UPDATE para atualizaras linhas de uma tabela com base em valores de outratabela.
![Page 272: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/272.jpg)
8-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE employees*
ERROR at line 1:ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found[restrição de integridade (HR.EMP_DEPT_FK)violada - chave mãe não encontrada]
UPDATE employees*
ERROR at line 1:ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found[restrição de integridade (HR.EMP_DEPT_FK)violada - chave mãe não encontrada]
UPDATE employeesSET department_id = 55WHERE department_id = 110;
UPDATE employeesSET department_id = 55WHERE department_id = 110;
Atualizando Linhas: Erro deRestrição de Integridade
Não existe o número de departamento 55
![Page 273: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/273.jpg)
8-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Delete uma linha da tabela DEPARTMENTS.
Removendo uma Linha de uma TabelaDEPARTMENTS
![Page 274: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/274.jpg)
8-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Instrução DELETE
Você pode remover linhas de uma tabela usando a instrução DELETE.
DELETE [FROM] tabela[WHERE condição];
DELETE [FROM] tabela[WHERE condição];
![Page 275: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/275.jpg)
8-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Se você especificar a cláusula WHERE, linhas específicas serão deletadas.
� Se você omitir a cláusula WHERE, todas as linhas da tabela serão deletadas.
Deletando Linhas de uma Tabela
DELETE FROM departmentsWHERE department_name = 'Finance';1 row deleted.
DELETE FROM departmentsWHERE department_name = 'Finance';1 row deleted.1 row deleted.
DELETE FROM copy_emp;22 rows deleted.
DELETE FROM copy_emp;22 rows deleted.22 rows deleted.
![Page 276: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/276.jpg)
8-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
DELETE FROM employeesWHERE department_id =
(SELECT department_idFROM departmentsWHERE department_name LIKE '%Public%');
1 row deleted.1 row deleted.
Deletando Linhas com Base em Outra Tabela
Use subconsultas nas instruções DELETE para removerlinhas de uma tabela com base em valores de outratabela.
![Page 277: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/277.jpg)
8-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Deletando Linhas: Erro deRestrição de Integridade
DELETE FROM departmentsWHERE department_id = 60;
DELETE FROM departmentsWHERE department_id = 60;
DELETE FROM departments*
ERROR at line 1:ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found[restrição de integridade (HR.EMP_DEPT_FK)violada - registro filho encontrado]
DELETE FROM departments*
ERROR at line 1:ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found[restrição de integridade (HR.EMP_DEPT_FK)violada - registro filho encontrado]
Você não pode deletar uma linha que contenha uma chaveprimária usada como chave estrangeira em outra tabela.
![Page 278: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/278.jpg)
8-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Subconsultaem uma Instrução INSERT
INSERT INTO(SELECT employee_id, last_name,
email, hire_date, job_id, salary, department_id
FROM employeesWHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000, 50);
1 row created.
INSERT INTO(SELECT employee_id, last_name,
email, hire_date, job_id, salary, department_id
FROM employeesWHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000, 50);
1 row created.
![Page 279: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/279.jpg)
8-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Subconsultaem uma Instrução INSERT
� Verifique os resultadosSELECT employee_id, last_name, email, hire_date, job_id, salary, department_id
FROM employeesWHERE department_id = 50;
SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id
FROM employeesWHERE department_id = 50;
![Page 280: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/280.jpg)
8-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando a Palavra-Chave WITH CHECK OPTION em Instruções DML
� Uma subconsulta é usada para identificar a tabela e as colunas da instrução DML.
� A palavra-chave WITH CHECK OPTION proíbe que você altere linhas que não estejam na subconsulta.
INSERT INTO (SELECT employee_id, last_name, email,hire_date, job_id, salary
FROM employeesWHERE department_id = 50 WITH CHECK OPTION)
VALUES (99998, 'Smith', 'JSMITH',TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000);
INSERT INTO*
ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation (violação da cláusula where WITH CHECK OPTION na view)
INSERT INTO (SELECT employee_id, last_name, email,hire_date, job_id, salary
FROM employeesWHERE department_id = 50 WITH CHECK OPTION)
VALUES (99998, 'Smith', 'JSMITH',TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000);
INSERT INTO*
ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clause violation (violação da cláusula where WITH CHECK OPTION na view)
![Page 281: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/281.jpg)
8-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Recurso Explicit Default (Default Explícito)
� Com o recurso Explicit Default, você pode usar apalavra-chave DEFAULT como um valor de coluna onde o valor default é desejado.
� Esse recurso foi adicionado para fins decompatibilidade com o SQL: 1999 Standard.
� Isso permite que o usuário controle onde e quando o valor default deve ser aplicado aos dados.
� Os valores default explícitos podem ser usados nas instruções INSERT e UPDATE.
![Page 282: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/282.jpg)
8-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Valores Default Explícitos
INSERT INTO departments(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);
INSERT INTO departments(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);
UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10;
UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10;
� DEFAULT com INSERT:
� DEFAULT com UPDATE:
![Page 283: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/283.jpg)
8-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Instrução MERGE
� Fornece a habilidade de atualizar ou inserir dados condicionalmente em uma tabela de banco de dados
� Executa uma operação UPDATE se a linha existir euma operação INSERT se for uma nova linha:� Evita atualizações separadas� Aumenta o desempenho e a facilidade de
utilização� É útil em aplicações de data warehousing
![Page 284: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/284.jpg)
8-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Sintaxe da Instrução MERGE
Você pode inserir ou atualizar linhas condicionalmente em uma tabela usando a instrução MERGE.
MERGE INTO nome_tabela apelido_tabelaUSING (tabela|view|subconsulta) apelidoON (condição de junção)WHEN MATCHED THENUPDATE SETcol1 = col_val1,col2 = col2_val
WHEN NOT MATCHED THENINSERT (lista_colunas)VALUES (valores_colunas);
MERGE INTO nome_tabela apelido_tabelaUSING (tabela|view|subconsulta) apelidoON (condição de junção)WHEN MATCHED THENUPDATE SETcol1 = col_val1,col2 = col2_val
WHEN NOT MATCHED THENINSERT (lista_colunas)VALUES (valores_colunas);
![Page 285: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/285.jpg)
8-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
MERGE INTO copy_emp cUSING employees eON (c.employee_id = e.employee_id)
WHEN MATCHED THENUPDATE SET
c.first_name = e.first_name,c.last_name = e.last_name,...c.department_id = e.department_id
WHEN NOT MATCHED THENINSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,e.salary, e.commission_pct, e.manager_id, e.department_id);
Intercalando Linhas
Insira ou atualize linhas na tabela COPY_EMP para que corresponda à tabela EMPLOYEES.
![Page 286: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/286.jpg)
8-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Intercalando Linhas
MERGE INTO copy_emp cUSING employees eON (c.employee_id = e.employee_id)
WHEN MATCHED THENUPDATE SET
...WHEN NOT MATCHED THENINSERT VALUES...;
MERGE INTO copy_emp cUSING employees eON (c.employee_id = e.employee_id)
WHEN MATCHED THENUPDATE SET
...WHEN NOT MATCHED THENINSERT VALUES...;
SELECT *FROM COPY_EMP;
no rows selected
SELECT *FROM COPY_EMP;
no rows selected
SELECT *FROM COPY_EMP;
20 rows selected.
SELECT *FROM COPY_EMP;
20 rows selected.
![Page 287: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/287.jpg)
8-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Transações de Banco de Dados
Uma transação de banco de dados consiste no seguinte: � Instruções DML que fazem uma alteração
consistente nos dados� Uma instrução DDL� Uma instrução DCL
![Page 288: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/288.jpg)
8-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Transações de Banco de Dados
� Iniciam quando a primeira instrução SQL DML éexecutada
� Terminam com um dos seguintes eventos:� Uma instrução COMMIT ou ROLLBACK é emitida� Um instrução DDL ou DCL é executada
(commit automático)� O usuário sai do iSQL*Plus� Ocorre uma falha no sistema
![Page 289: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/289.jpg)
8-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Vantagens das Instruções COMMIT e ROLLBACK
Com as instruções COMMIT e ROLLBACK, você pode: � Garantir a consistência dos dados� Visualizar as alterações nos dados antes de
fazer alterações permanentes� Agrupar operações relacionadas logicamente
![Page 290: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/290.jpg)
8-37 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Controlando Transações
SAVEPOINT B
SAVEPOINT A
DELETE
INSERT
UPDATE
INSERT
COMMITTempo
Transação
ROLLBACKto SAVEPOINT B
ROLLBACKto SAVEPOINT A
ROLLBACK
![Page 291: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/291.jpg)
8-38 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE...SAVEPOINT update_done;SavepointSavepoint created.created.INSERT...ROLLBACK TO update_done;Rollback complete.Rollback complete.
Fazendo Rollback de Alteraçõesaté um Marcador
� Crie um marcador em uma transação atual usandoa instrução SAVEPOINT.
� Faça o rollback até esse marcador usando ainstrução ROLLBACK TO SAVEPOINT.
![Page 292: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/292.jpg)
8-39 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Um commit automático ocorre nas seguintes circunstâncias:� A emissão de uma instrução DDL� A emissão de uma instrução DCL� A saída normal do iSQL*Plus, sem emitir
explicitamente as instruções COMMIT ou ROLLBACK
� Um rollback automático ocorre quando há um término anormal do iSQL*Plus ou uma falha do sistema.
Processamento de Transação Implícita
![Page 293: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/293.jpg)
8-40 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Estado dos Dados Antes de COMMIT ou ROLLBACK
� O estado anterior dos dados pode ser recuperado.� O usuário atual pode revisar os resultados das
operações DML usando a instrução SELECT.� Os outros usuários não podem ver os resultados
das instruções DML do usuário atual.� As linhas afetadas são bloqueadas; os outros
usuários não poderão alterar os dados contidos nessas linhas.
![Page 294: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/294.jpg)
8-41 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Estado dos Dados Após COMMIT
� As alterações nos dados se tornam permanentes nobanco de dados.
� O estado anterior dos dados é perdido permanentemente.
� Todos os usuários podem ver os resultados.� As linhas afetadas são desbloqueadas; essas linhas
estão disponíveis para que outros usuários asmanipulem.
� Todos os pontos de salvamento são apagados.
![Page 295: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/295.jpg)
8-42 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
COMMIT;Commit complete.Commit complete.
� Faça as alterações.
� Submeta as alterações a commit.
DELETE FROM employeesWHERE employee_id = 99999;1 row deleted.
INSERT INTO departmentsVALUES (290, 'Corporate Tax', NULL, 1700);1 row inserted.
DELETE FROM employeesWHERE employee_id = 99999;WHERE employee_id = 99999;1 row deleted.1 row deleted.
INSERT INTO departmentsVALUES (290, 'Corporate Tax', NULL, 1700);1 row inserted.1 row inserted.
Submetendo Dados a Commit
![Page 296: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/296.jpg)
8-43 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Estado dos Dados Após ROLLBACK
Descarte todas as alterações pendentes usando a instrução ROLLBACK:� As alterações nos dados são desfeitas.� O estado anterior dos dados é restaurado.� As linhas afetadas são desbloqueadas.
DELETE FROM copy_emp;22 rows deleted.22 rows deleted.ROLLBACK;Rollback complete.Rollback complete.
![Page 297: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/297.jpg)
8-45 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Rollback no Nível da Instrução
� Se ocorrer falha durante a execução de uma única instrução DML, será feito o rollback somente dessa instrução.
� O servidor Oracle implementará um ponto desalvamento implícito.
� Todas as outras alterações serão mantidas.� O usuário deve finalizar as transações
explicitamente executando uma instrução COMMITou ROLLBACK.
![Page 298: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/298.jpg)
8-46 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consistência na Leitura
� A consistência na leitura garante sempre uma exibição consistente dos dados.
� As alterações feitas por um usuário não entramem conflito com as alterações feitas por outro usuário.
� A consistência na leitura garante que nos mesmos dados:� Os leitores não esperem pelos autores.� Os autores não esperem pelos leitores.
![Page 299: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/299.jpg)
8-47 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT *FROM userA.employees;
Implementação da Consistência na Leitura
UPDATE employeesSET salary = 7000WHERE last_name = 'Goyal';
Blocos dedados
Segmentos de rollback
dados alteradose dados inalteradosdados "antigos"antes das alterações
Usuário A
Usuário B
Imagem daconsistênciana leitura
![Page 300: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/300.jpg)
8-48 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Bloqueio
Em um banco de dados Oracle, os bloqueios:� Impedem a interação destrutiva entre transações
simultâneas� Não requerem ações do usuário� Usam automaticamente o nível mais baixo de
restrição� São mantidos durante a transação� São de dois tipos: bloqueios explícitos e
implícitos
![Page 301: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/301.jpg)
8-49 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Bloqueio Implícito
� Dois modos de bloqueio:� Exclusivo: bloqueia o acesso de outros usuários� De compartilhamento: permite o acesso de outros
usuários� Nível elevado de concorrência dos dados:
� DML: compartilhamento de tabela, linha exclusiva� Consultas: não são necessários bloqueios� DDL: protege as definições de objeto
� Os bloqueios são mantidos até o commit ou rollback
![Page 302: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/302.jpg)
8-50 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Instrução
INSERT
UPDATE
DELETE
MERGE
COMMIT
SAVEPOINT
ROLLBACK
Nesta lição, você aprendeu a usar instruções DML e acontrolar transações.
Descrição
Adiciona uma nova linha à tabela
Modifica linhas existentes na tabela
Remove linhas existentes da tabela
Insere ou atualiza dados condicionalmente em uma tabela
Torna permanentes todas as alterações pendentes
É usada para fazer rollback até o marcador de ponto de salvamento
Descarta todas as alterações pendentes nos dados
![Page 303: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/303.jpg)
8-51 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 8
Este exercício abrange os seguintes tópicos:� Inserindo linhas nas tabelas� Atualizando e deletando linhas na tabela� Controlando transações
![Page 304: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/304.jpg)
8-55 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SaídaSaída TempoTempo SessãoSessão 11 SessãoSessão 22
t1t1
t2t2
t3t3
t4t4
t5t5
SELECT salary FROM employeesWHERE last_name='King';24000
UPDATE employeesSET salary=salary+10000WHERE last_name='King';
24000
COMMIT;
34000
SELECT salary FROM employeesWHERE last_name='King';
SELECT salary FROM employeesWHERE last_name='King';
Exemplo de Consistência na Leitura
![Page 305: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/305.jpg)
9Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando e Gerenciando Tabelas
![Page 306: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/306.jpg)
9-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever os principais objetos de banco de dados� Criar tabelas� Descrever os tipos de dados que podem ser usados
ao se especificar a definição da coluna� Alterar definições de tabela� Eliminar, renomear e truncar tabelas
![Page 307: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/307.jpg)
9-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetos de Banco de Dados
Objeto Descrição
Tabela Unidade básica de armazenamento, composta de linhas e colunas
View Representa logicamente subconjuntos dedados de uma ou mais tabelas
Seqüência Gerador de valores numéricos
Índice Melhora o desempenho de algumas consultasSinônimo Atribui nomes alternativos a objetos
![Page 308: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/308.jpg)
9-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Regras para Nomeação
Nomes de tabelas e de colunas:� Devem ser iniciados por uma letra� Devem ter de 1 a 30 caracteres� Devem conter somente AZ, az, 09, _, $ e #� Não devem duplicar o nome de outro objeto de
propriedade do mesmo usuário� Não devem ser uma palavra reservada do servidor
Oracle
![Page 309: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/309.jpg)
9-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Instrução CREATE TABLE
� Você deve ter:� O privilégio CREATE TABLE� Uma área de armazenamento
� Especifique:� O nome da tabela� O nome, o tipo de dados e o tamanho da coluna
CREATE TABLE [esquema.]tabela (coluna tipo_de_dados [DEFAULT expr][, ...]);
![Page 310: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/310.jpg)
9-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Fazendo Referência a Tabelasde Outro Usuário
� As tabelas que pertencem a outros usuários nãoestão no esquema do usuário.
� Você deve usar o nome do proprietário comoprefixo dessas tabelas.
![Page 311: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/311.jpg)
9-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Opção DEFAULT
� Especifique um valor default para uma coluna duranteuma inserção.
� Valores literais, expressões ou funções SQL sãovalores válidos.
� O nome de outra coluna ou uma pseudocoluna sãovalores inválidos.
� O tipo de dados default deve corresponder ao tipo dedados da coluna.
... hire_date DATE DEFAULT SYSDATE, ...
![Page 312: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/312.jpg)
9-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Crie a tabela.
� Confirme a criação da tabela.
Criando Tabelas
CREATE TABLE dept(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13));
Table created.Table created.
DESCRIBE dept
![Page 313: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/313.jpg)
9-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tabelas no Banco de Dados Oracle
� Tabelas do Usuário:� São um conjunto de tabelas criadas e
mantidas pelo usuário� Contêm informações sobre o usuário
� Dicionário de Dados:� É um conjunto de tabelas criadas e mantidas
pelo servidor Oracle� Contém informações sobre o banco de dados
![Page 314: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/314.jpg)
9-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT table_name FROM user_tables ;
SELECT *FROM user_catalog ;
Consultando o Dicionário de Dados
� Exiba tipos de objetos distintos de propriedade dousuário.
� Exiba tipos de objetos distintos de propriedade dousuário.
� Exiba tabelas, views, sinônimos e seqüências depropriedade do usuário.
� Exiba tabelas, views, sinônimos e seqüências depropriedade do usuário.
SELECT DISTINCT object_type FROM user_objects ;
� Veja os nomes de tabelas de propriedade do usuário.� Veja os nomes de tabelas de propriedade do usuário.
![Page 315: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/315.jpg)
9-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de DadosTipo de Dados Descrição
VARCHAR2(tamanho) Dados de caractere de comprimento variávelCHAR(tamanho) Dados de caractere de comprimento fixoNUMBER(p,s) Dados numéricos de comprimento variávelDATE Valores de data e horárioLONG Dados de caractere de comprimento variável
de até 2 gigabytesCLOB Dados de caractere de até 4 gigabytesRAW e LONG RAW Dados binários brutosBLOB Dados binários de até 4 gigabytesBFILE Dados binários armazenados em um arquivo
externo; até 4 gigabytesROWID Um sistema numérico de base 64 que
representa o endereço exclusivo de umalinha na tabela
![Page 316: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/316.jpg)
9-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de Dados de Data/Horário
Tipo de Dados DescriçãoTIMESTAMP Data com frações de segundoINTERVAL YEAR TO MONTH Armazenado como um intervalo
de anos e mesesINTERVAL DAY TO SECOND Armazenado como um intervalo
de dias, horas, minutos e segundos
Melhorias de data/horário no Oracle9i:� Foram introduzidos novos tipos de dados de
data/horário.� Está disponível um novo armazenamento de tipos
de dados.� Foram feitas melhorias nos fusos horários
e no fuso horário local.
![Page 317: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/317.jpg)
9-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de Dados de Data/Horário
� O tipo de dados TIMESTAMP é uma extensão do tipo dedados DATE.
� Ele armazena o ano, o mês e o dia do tipo de dadosDATE, além dos valores de horas, minutos e segundos,assim como o valor das frações de segundo.
� O tipo de dados TIMESTAMP é especificado da seguinteforma:
TIMESTAMP[(fractional_seconds_precision)]
![Page 318: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/318.jpg)
9-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipo de Dados TIMESTAMP WITH TIME ZONE
� TIMESTAMP WITH TIME ZONE é uma variante deTIMESTAMP que inclui um deslocamento de fusohorário em seu valor.
� O deslocamento de fuso horário é a diferença, emhoras e minutos, entre o horário local e o UTC("Coordinated Universal Time").
TIMESTAMP[(fractional_seconds_precision)]WITH TIME ZONE
![Page 319: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/319.jpg)
9-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipo de Dados TIMESTAMPWITH LOCAL TIME ZONE
� TIMESTAMP WITH LOCAL TIME ZONE é outra variantede TIMESTAMP que inclui um deslocamento de fusohorário em seu valor.
� Os dados armazenados no banco de dados sãonormalizados para o fuso horário do banco de dados.
� O deslocamento de fuso horário não é armazenadocomo parte dos dados das colunas; o Oracle retornaos dados no fuso horário local da sessão dos usuários.
� O tipo de dados TIMESTAMP WITH LOCAL TIME ZONEé especificado da seguinte forma:TIMESTAMP[(fractional_seconds_precision)]WITH LOCAL TIME ZONE
![Page 320: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/320.jpg)
9-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipo de Dados INTERVAL YEAR TO MONTH
� INTERVAL YEAR TO MONTH armazena um período detempo usando os campos de data/horário YEAR eMONTH.
INTERVAL YEAR [(year_precision)] TO MONTH
INTERVAL '123-2' YEAR(3) TO MONTHIndica um intervalo de 123 anos, 2 meses.
INTERVAL '123' YEAR(3)Indica um intervalo de 123 anos, 0 meses.
INTERVAL '300' MONTH(3)Indica um intervalo de 300 meses.
INTERVAL '123' YEARRetorna um erro, porque a precisão default é 2e '123' tem 3 dígitos.
![Page 321: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/321.jpg)
9-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipo de Dados INTERVAL DAY TO SECOND
� INTERVAL DAY TO SECOND armazena um período detempo em termos de dias, horas, minutos e segundos.
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
INTERVAL '4 5:12:10.222' DAY TO SECOND(3)Indica 4 dias, 5 horas, 12 minutos, 10 segundos e 222 milésimos de segundo.
INTERVAL '7' DAYIndica 7 dias.
INTERVAL '180' DAY(3) Indica 180 dias.
![Page 322: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/322.jpg)
9-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipo de Dados INTERVAL DAY TO SECOND
� INTERVAL DAY TO SECOND armazena um período detempo em termos de dias, horas, minutos e segundos.
INTERVAL '4 5:12:10.222' DAY TO SECOND(3)Indica 4 dias, 5 horas, 12 minutos, 10 segundos e 222 milésimos de segundo.
INTERVAL '4 5:12' DAY TO MINUTEIndica 4 dias, 5 horas e 12 minutos.
INTERVAL '400 5' DAY(3) TO HOURIndica 400 dias e 5 horas.
INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)Indica 11 horas, 12 minutos e 10,2222222 segundos.
![Page 323: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/323.jpg)
9-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma Tabela Usandouma Sintaxe de Subconsulta
� Crie uma tabela e insira linhas combinando a instruçãoCREATE TABLE e a opção AS subconsulta.
� Estabeleça uma correspondência entre o número decolunas especificadas e o número de colunas dasubconsulta.
� Defina colunas com nomes de colunas e valoresdefault.
CREATE TABLE tabela [(coluna, coluna...)]AS subconsulta;
![Page 324: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/324.jpg)
9-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma Tabela Usando uma Subconsulta
DESCRIBE dept80
CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;Table created.Table created.
![Page 325: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/325.jpg)
9-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Instrução ALTER TABLE
Use a instrução ALTER TABLE para:� Adicionar uma nova coluna� Modificar uma coluna existente� Definir um valor default para a nova coluna� Eliminar uma coluna
![Page 326: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/326.jpg)
9-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Instrução ALTER TABLE
Use a instrução ALTER TABLE para adicionar, modificarou eliminar colunas.
ALTER TABLE tabelaADD (coluna tipo_de_dados [DEFAULT expr]
[,coluna tipo_de_dados]...);
ALTER TABLE tabelaMODIFY (coluna tipo_de_dados [DEFAULT expr]
[,coluna tipo_de_dados]...);
ALTER TABLE tabelaDROP (coluna);
![Page 327: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/327.jpg)
9-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando uma Coluna
DEPT80
"Adicioneuma novacoluna àtabelaDEPT80."
DEPT80
Nova coluna
![Page 328: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/328.jpg)
9-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando uma Coluna
� Use a cláusula ADD para adicionar colunas.
� A nova coluna torna-se a última coluna.
ALTER TABLE dept80ADD (job_id VARCHAR2(9));Table altered.Table altered.
![Page 329: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/329.jpg)
9-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Modificando uma Coluna
� Você pode alterar o tipo de dados, o tamanho e ovalor default de uma coluna.
� Uma alteração no valor default afeta somente asinserções subseqüentes na tabela.
ALTER TABLE dept80MODIFY (last_name VARCHAR2(30));Table altered.Table altered.
![Page 330: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/330.jpg)
9-29 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Eliminando uma Coluna
Use a cláusula DROP COLUMN para eliminar colunas quenão são mais necessárias na tabela.
ALTER TABLE dept80DROP COLUMN job_id; Table altered.Table altered.
![Page 331: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/331.jpg)
9-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ALTER TABLE tabelaSET UNUSED (coluna);
ALTER TABLE tabelaSET UNUSED COLUMN coluna;
ALTER TABLE tabelaSET UNUSED (coluna);
ALTER TABLE tabelaSET UNUSED COLUMN coluna;
A Opção SET UNUSED
� Use a opção SET UNUSED para marcar uma ou maiscolunas como não usadas.
� Use a opção DROP UNUSED COLUMNS para remover ascolunas que estiverem marcadas como não usadas.
OU
ALTER TABLE tabelaDROP UNUSED COLUMNS;
ALTER TABLE tabelaDROP UNUSED COLUMNS;
![Page 332: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/332.jpg)
9-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Eliminando uma Tabela
� Todos os dados e a estrutura da tabela serãoexcluídos.
� Todas as transações pendentes sofrerão commit.� Todos os índices serão eliminados.� Você não pode fazer rollback da instrução DROP
TABLE.DROP TABLE dept80;Table dropped.Table dropped.
![Page 333: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/333.jpg)
9-33 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Alterando o Nome de um Objeto
� Para alterar o nome de uma tabela, view, seqüênciaou sinônimo, execute a instrução RENAME.
� Você deve ser o proprietário do objeto.
RENAME dept TO detail_dept;Table renamed.Table renamed.
![Page 334: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/334.jpg)
9-34 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Truncando uma Tabela
� A Instrução TRUNCATE TABLE:� Remove todas as linhas de uma tabela� Libera o espaço de armazenamento usado por
essa tabela
� Você não poderá fazer rollback da remoção de linhasquando usar TRUNCATE.
� Você também tem a opção de remover as linhasusando a instrução DELETE.
TRUNCATE TABLE detail_dept;Table truncated.Table truncated.
![Page 335: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/335.jpg)
9-35 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando Comentários a uma Tabela
� Você pode adicionar comentários a uma tabela oucoluna usando a instrução COMMENT.
� Os comentários podem ser exibidos através dasviews de dicionário de dados:– ALL_COL_COMMENTS
– USER_COL_COMMENTS
– ALL_TAB_COMMENTS
– USER_TAB_COMMENTS
COMMENT ON TABLE employeesIS 'Employee Information';Comment created.Comment created.
![Page 336: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/336.jpg)
9-36 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Instrução Descrição
CREATE TABLE Cria uma tabela
ALTER TABLE Modifica a estrutura da tabela
DROP TABLE Remove as linhas e a estrutura da tabela
RENAME Altera o nome de uma tabela, view,seqüência ou sinônimo
TRUNCATE Remove todas as linhas de umatabela e libera o espaço de armazenamento
COMMENT Adiciona comentários a uma tabela ou view
Nesta lição, você aprendeu a usar instruções DDL paracriar, alterar, eliminar e renomear tabelas.
![Page 337: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/337.jpg)
9-38 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 9
Este exercício abrange os seguintes tópicos:� Criando novas tabelas� Criando uma nova tabela usando a sintaxe CREATE
TABLE AS
� Modificando definições de coluna� Verificando se que as tabelas existem� Adicionando comentários às tabelas� Eliminando tabelas� Alterando tabelas
![Page 338: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/338.jpg)
10Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Incluindo Restrições
![Page 339: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/339.jpg)
10-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever restrições� Criar e manter restrições
![Page 340: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/340.jpg)
10-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que São Restrições?
� As restrições impõem regras no nível da tabela.� As restrições evitam que uma tabela seja deletada
se houver dependências.� Os seguintes tipos de restrições são válidos:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
![Page 341: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/341.jpg)
10-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Diretrizes sobre Restrições
� Dê um nome à restrição ou deixe o servidor Oraclegerar um nome usando o formato SYS_Cn.
� Crie uma restrição:� No momento em que a tabela for criada ou� Depois que a tabela tiver sido criada
� Defina uma restrição no nível da coluna ou da tabela.� Exiba uma restrição no dicionário de dados.
![Page 342: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/342.jpg)
10-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definindo Restrições
CREATE TABLE [esquema.]tabela (coluna tipo_de_dados [DEFAULT expr]
[restrição_de_coluna],...[restrição_de_tabela][,...]);
CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
![Page 343: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/343.jpg)
10-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Definindo Restrições
� Nível de restrição da coluna
� Nível de restrição da tabela
coluna [CONSTRAINT nome_da_restrição] tipo_de_restrição,coluna [CONSTRAINT nome_da_restrição] tipo_de_restrição,
coluna,... [CONSTRAINT nome_da_restrição] tipo_de_restrição (coluna, ...),
coluna,... [CONSTRAINT nome_da_restrição] tipo_de_restrição (coluna, ...),
![Page 344: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/344.jpg)
10-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição NOT NULL
Assegura que não sejam permitidos valores nulos paraa coluna:
Restrição NOT NULL(Nenhuma linha podeconter um valor nulonesta coluna.)
Ausência da restriçãoNOT NULL (Qualquerlinha pode conterum valor nulo nestacoluna.)
RestriçãoNOT NULL
�
![Page 345: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/345.jpg)
10-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,...
A Restrição NOT NULL
É definida no nível da coluna:
Nomeadopelosistema
Nomeadopelousuário
![Page 346: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/346.jpg)
10-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição UNIQUE
EMPLOYEESRestrição UNIQUE
INSERT INTO
Não permitido:já existe
Permitido
�
![Page 347: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/347.jpg)
10-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição UNIQUE
Definida no nível da tabela ou da coluna:
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... CONSTRAINT emp_email_uk UNIQUE(email));
![Page 348: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/348.jpg)
10-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição de PRIMARY KEYDEPARTMENTS
PRIMARY KEY
INSERT INTONão permitido(Valor nulo)
Não permitido(50 já existe)
�
![Page 349: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/349.jpg)
10-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CREATE TABLE departments ( department_id NUMBER(4), department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL, manager_id NUMBER(6), location_id NUMBER(4), CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
A Restrição de PRIMARY KEY
Definida no nível da tabela ou da coluna:
![Page 350: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/350.jpg)
10-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição de FOREIGN KEYDEPARTMENTS
EMPLOYEES
FOREIGNKEY
INSERT INTO
Não permitido(9 não existe)
Permitido
PRIMARYKEY �
�
![Page 351: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/351.jpg)
10-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição de FOREIGN KEY
Definida no nível da tabela ou da coluna:CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... department_id NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email));
![Page 352: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/352.jpg)
10-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Palavras-chave da Restriçãode FOREIGN KEY
� FOREIGN KEY: define a coluna na tabela filha nonível de restrição da tabela.
� REFERENCES: identifica a tabela e a coluna natabela mãe.
� ON DELETE CASCADE: deleta as linhasdependentes da tabela filha quando uma linhada tabela mãe é deletada.
� ON DELETE SET NULL: converte valores dechave estrangeira dependentes em valores nulos.
![Page 353: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/353.jpg)
10-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Restrição CHECK
� Define uma condição que cada linha deve satisfazer� As expressões a seguir não são permitidas:
� Referências às pseudocolunas CURRVAL, NEXTVAL,LEVEL e ROWNUM
� Chamadas para as funções SYSDATE, UID, USER eUSERENV
� Consultas que se referem a outros valores emoutras linhas
..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...
![Page 354: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/354.jpg)
10-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando uma Sintaxe de Restrição
Use a instrução ALTER TABLE para:� Adicionar ou eliminar uma restrição sem modificar
sua estrutura� Ativar ou desativar restrições� Adicionar uma restrição NOT NULL usando a
cláusula MODIFY
ALTER TABLE tabela ADD [CONSTRAINT restrição] tipo (coluna);
ALTER TABLE tabela ADD [CONSTRAINT restrição] tipo (coluna);
![Page 355: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/355.jpg)
10-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Adicionando uma Restrição
Adicione uma restrição de FOREIGN KEY à tabelaEMPLOYEES indicando que já deve existir um gerentecomo um funcionário válido na tabela EMPLOYEES.ALTER TABLE employeesADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);Table altered.Table altered.
![Page 356: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/356.jpg)
10-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Eliminando uma Restrição
� Remova a restrição de gerente da tabelaEMPLOYEES.
� Remova a restrição de PRIMARY KEY databela DEPARTMENTS e elimine a restriçãode FOREIGN KEY associada da colunaEMPLOYEES.DEPARTMENT_ID.
ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.
ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.Table altered.
ALTER TABLE departmentsDROP PRIMARY KEY CASCADE;Table altered.
ALTER TABLE departmentsDROP PRIMARY KEY CASCADE;Table altered.Table altered.
![Page 357: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/357.jpg)
10-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Desativando Restrições
� Execute a cláusula DISABLE da instrução ALTERTABLE para desativar uma restrição de integridade.
� Aplique a opção CASCADE para desativar restriçõesde integridade dependentes.
ALTER TABLE employeesDISABLE CONSTRAINT emp_emp_id_pk CASCADE;Table altered.
ALTER TABLE employeesDISABLE CONSTRAINT emp_emp_id_pk CASCADE;Table altered.Table altered.
![Page 358: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/358.jpg)
10-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Ativando Restrições
� Ative uma restrição de integridade desativadano momento na definição da tabela, usando acláusula ENABLE.
� Um índice UNIQUE ou PRIMARY KEY seráautomaticamente criado se você ativar umarestrição de chave UNIQUE ou PRIMARY KEY.
ALTER TABLE employeesENABLE CONSTRAINT emp_emp_id_pk;Table altered.
ALTER TABLE employeesENABLE CONSTRAINT emp_emp_id_pk;Table altered.Table altered.
![Page 359: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/359.jpg)
10-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Restrições em Cascata
� A cláusula CASCADE CONSTRAINTS é usada emconjunto com a cláusula DROP COLUMN.
� A cláusula CASCADE CONSTRAINTS elimina todasas restrições de integridade referenciais queremetam às chaves exclusivas e primária definidasnas colunas eliminadas.
� A cláusula CASCADE CONSTRAINTS tambémelimina todas as restrições de várias colunasdefinidas nas colunas eliminadas.
![Page 360: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/360.jpg)
10-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Restrições em Cascata
Exemplo:
ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS;Table altered.
ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS;Table altered.Table altered.
ALTER TABLE test1 DROP (pk, fk, col1) CASCADE CONSTRAINTS;Table altered.
ALTER TABLE test1 DROP (pk, fk, col1) CASCADE CONSTRAINTS;Table altered.Table altered.
![Page 361: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/361.jpg)
10-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT constraint_name, constraint_type,search_condition
FROM user_constraintsWHERE table_name = 'EMPLOYEES';
Verificando Restrições
Consulte a tabela USER_CONSTRAINTS para ver todosos nomes e definições de restrições.
�
![Page 362: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/362.jpg)
10-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT constraint_name, column_nameFROM user_cons_columnsWHERE table_name = 'EMPLOYEES';
Verificando Colunas Associadas a Restrições
Veja as colunas associadas aos nomes de restriçõesna view USER_CONS_COLUMNS.
�
![Page 363: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/363.jpg)
10-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a criar restrições.� Tipos de restrições:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
� Você pode consultar a tabela USER_CONSTRAINTSpara ver todos os nomes e definições de restrições.
![Page 364: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/364.jpg)
10-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 10
Este exercício abrange os seguintes tópicos:� Adicionando restrições às tabelas existentes� Adicionando mais colunas a uma tabela� Exibindo informações nas views de dicionário de dados
![Page 365: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/365.jpg)
11Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando ViewsCriando Views
![Page 366: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/366.jpg)
11-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ObjetivosObjetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever uma view� Criar uma view, eliminá-la e alterar sua definição� Recuperar dados através de uma view� Inserir, atualizar e deletar dados através de uma view� Criar e usar uma view em linha� Executar a análise "Top-N"
Após concluir esta lição, você poderá fazer o seguinte:� Descrever uma view� Criar uma view, eliminá-la e alterar sua definição� Recuperar dados através de uma view� Inserir, atualizar e deletar dados através de uma view� Criar e usar uma view em linha� Executar a análise "Top-N"
![Page 367: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/367.jpg)
11-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetos de Banco de DadosObjetos de Banco de Dados
Descrição
Unidade básica de armazenamento,composta de linhas e colunas
Representa logicamente subconjuntosde dados de uma ou mais tabelas
Gera valores de chave primária
Melhora o desempenho de algumas consultas
Nome alternativo para um objeto
Objeto
Tabela
View
Seqüência
Índice
Sinônimo
![Page 368: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/368.jpg)
11-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que é uma View?O que é uma View?Tabela EMPLOYEES:
![Page 369: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/369.jpg)
11-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Por que Usar Views?Por que Usar Views?
� Para restringir o acesso a dados� Para facilitar as consultas complexas� Para permitir a independência dos dados� Para apresentar diferentes visualizações
dos mesmos dados
� Para restringir o acesso a dados� Para facilitar as consultas complexas� Para permitir a independência dos dados� Para apresentar diferentes visualizações
dos mesmos dados
![Page 370: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/370.jpg)
11-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Views Simples eViews ComplexasViews Simples e
Views Complexas
Recurso Views Simples Views Complexas
Número de tabelas Uma Uma ou mais
Contém funções Não Sim
Contém grupos de dados Não Sim
Operações DMLatravés de uma view Sim Nem sempre
![Page 371: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/371.jpg)
11-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma View
� Incorpore uma subconsulta na instrução CREATEVIEW.
� A subconsulta pode conter uma sintaxe SELECTcomplexa.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(apelido[, apelido]...)] AS subconsulta[WITH CHECK OPTION [CONSTRAINT restrição]][WITH READ ONLY [CONSTRAINT restrição]];
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(apelido[, apelido]...)] AS subconsulta[WITH CHECK OPTION [CONSTRAINT restrição]][WITH READ ONLY [CONSTRAINT restrição]];
![Page 372: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/372.jpg)
11-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma View
� Crie uma view, EMPVU80, que contenha detalhes dosfuncionários do departamento 80.
� Descreva a estrutura da view usando o comandoDESCRIBE do iSQL*Plus.
DESCRIBE empvu80DESCRIBE empvu80
CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80;View created.View created.
![Page 373: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/373.jpg)
11-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma View
� Crie uma view usando apelidos de coluna nasubconsulta.
� Selecione as colunas nesta view pelos nomes deapelidos atribuídos.
CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50;View created.View created.
![Page 374: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/374.jpg)
11-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Recuperando Dados de uma ViewRecuperando Dados de uma View
SELECT *FROM salvu50;
![Page 375: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/375.jpg)
11-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consultando uma ViewConsultando uma View
USER_VIEWSUSER_VIEWS EMPVU80EMPVU80SELECT employee_id, last_name, salaryFROM employeesWHERE department_id=80;
iSQL*Plus
SELECT *FROM empvu80;
EMPLOYEES
ServidorServidor Oracle Oracle
![Page 376: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/376.jpg)
11-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Modificando uma View
� Modifique a view EMPVU80 usando a cláusulaCREATE OR REPLACE VIEW. Adicione um apelidopara cada nome de coluna.
� Os apelidos de coluna na cláusula CREATE VIEWestão listados na mesma ordem que as colunasna subconsulta.
CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id)AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;View created.View created.
![Page 377: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/377.jpg)
11-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma View Complexa
Crie uma view complexa que contenha funções de grupopara exibir os valores de duas tabelas.
CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name;View created.View created.
![Page 378: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/378.jpg)
11-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Regras para ExecutarOperações DML em uma View
� Você poderá executar operações DML em viewssimples.
� Você não poderá remover uma linha se a view contiver:� Funções de grupo� Uma cláusula GROUP BY� A palavra-chave DISTINCT� A palavra-chave ROWNUM da pseudocoluna
![Page 379: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/379.jpg)
11-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Regras para ExecutarOperações DML em uma View
Você não poderá modificar dados em uma view se elacontiver:� Funções de grupo� Uma cláusula GROUP BY� A palavra-chave DISTINCT� A palavra-chave ROWNUM da pseudocoluna� Colunas definidas por expressões
![Page 380: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/380.jpg)
11-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Regras para ExecutarOperações DML em uma View
Não será possível adicionar dados através de umaview se ela incluir:� Funções de grupo� Uma cláusula GROUP BY� A palavra-chave DISTINCT� A palavra-chave ROWNUM da pseudocoluna� Colunas definidas por expressões� Colunas NOT NULL nas tabelas-base que não sejam
selecionadas pela view
![Page 381: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/381.jpg)
11-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Você pode garantir que as operações DMLexecutadas na view permaneçam no domínio daview usando a cláusula WITH CHECK OPTION.
� Qualquer tentativa de alterar o número dedepartamento em qualquer linha da view resultaráem falha porque será violada a restrição WITH CHECKOPTION.
CREATE OR REPLACE VIEW empvu20AS SELECT * FROM employees WHERE department_id = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck ;View created.View created.
Usando a Cláusula WITH CHECK OPTION
![Page 382: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/382.jpg)
11-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Negando Operações DML
� Você pode assegurar que nenhuma operação DMLocorra adicionando a opção WITH READ ONLY àdefinição de view.
� Qualquer tentativa de executar uma operação DMLem uma linha da view resultará em erro no servidorOracle.
![Page 383: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/383.jpg)
11-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Negando Operações DML
CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title)AS SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 10 WITH READ ONLY;View created.View created.
![Page 384: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/384.jpg)
11-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Removendo uma ViewRemovendo uma View
Você pode remover uma view sem perder dados porqueela se baseia em tabelas subjacentes no banco de dados.Você pode remover uma view sem perder dados porqueela se baseia em tabelas subjacentes no banco de dados.
DROP VIEW empvu80;View dropped.View dropped.
DROP VIEW view;DROP VIEW view;
![Page 385: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/385.jpg)
11-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Views em LinhaViews em Linha
� Uma view em linha é uma subconsulta com umapelido (ou nome de correlação) que pode serusada em uma instrução SQL.
� Uma subconsulta com um determinado nome nacláusula FROM da consulta principal é um exemplode view em linha.
� Uma view em linha não é um objeto de esquema.
� Uma view em linha é uma subconsulta com umapelido (ou nome de correlação) que pode serusada em uma instrução SQL.
� Uma subconsulta com um determinado nome nacláusula FROM da consulta principal é um exemplode view em linha.
� Uma view em linha não é um objeto de esquema.
![Page 386: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/386.jpg)
11-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Análise Top-N
� As consultas Top-N procuram os n maiores oumenores valores de uma coluna. Por exemplo:� Quais são os dez produtos mais vendidos?� Quais são os dez produtos menos vendidos?
� Tanto o conjunto dos maiores como o dos menoresvalores são considerados consultas Top-N.
![Page 387: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/387.jpg)
11-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Executando a Análise Top-N
A estrutura de nível superior de uma consulta de análise"Top-N" é:SELECT [lista_de_colunas], ROWNUM FROM (SELECT [lista_de_colunas] FROM tabela ORDER BY coluna_Top-N)WHERE ROWNUM <= N;
SELECT [lista_de_colunas], ROWNUM FROM (SELECT [lista_de_colunas] FROM tabela ORDER BY coluna_Top-N)WHERE ROWNUM <= N;
![Page 388: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/388.jpg)
11-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Análise Top-NExemplo de Análise Top-N
Para exibir os nomes e os salários dos três funcionáriosmais bem remunerados da tabela EMPLOYEES:Para exibir os nomes e os salários dos três funcionáriosmais bem remunerados da tabela EMPLOYEES:
SELECT ROWNUM as RANK, last_name, salary FROM (SELECT last_name,salary FROM employees ORDER BY salary DESC)WHERE ROWNUM <= 3;
31 2
1 2 3
![Page 389: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/389.jpg)
11-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu que uma view é derivada dosdados contidos em outras tabelas ou views e oferece asseguintes vantagens:� Restringe o acesso a bancos de dados� Simplifica as consultas� Permite a independência dos dados� Proporciona várias visualizações dos mesmos dados� Pode ser eliminada sem remover os dados subjacentes� Uma view em linha é uma subconsulta com um nome
apelido� Pode-se efetuar uma análise "Top-N" usando
subconsultas e consultas externas
![Page 390: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/390.jpg)
11-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 11
Este exercício abrange os seguintes tópicos:� Criando uma view simples� Criando uma view complexa� Criando uma view com restrição de verificação� Tentando modificar dados na view� Exibindo definições de view� Removendo views
![Page 391: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/391.jpg)
12Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Outros Objetos de Banco de Dados
![Page 392: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/392.jpg)
12-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazero seguinte:� Criar, manter e usar seqüências� Criar e manter índices� Criar sinônimos privados e públicos
![Page 393: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/393.jpg)
12-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetos de Banco de DadosObjetos de Banco de Dados
Objeto Descrição
Unidade básica de armazenamento, composta de linhas e colunas
Representa logicamente subconjuntos de dadosde uma ou mais tabelas
Nome alternativo para um objeto
Melhora o desempenho de algumas consultas
Gera valores de chave primária
Sinônimo
Índice
Seqüência
View
Tabela
![Page 394: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/394.jpg)
12-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que é uma Seqüência?
Uma seqüência:� Gera números exclusivos automaticamente� É um objeto compartilhável� É geralmente usada para criar um valor de chave
primária� Substitui o código de aplicação� Acelera a eficácia do acesso a valores de
seqüência quando estão no cache na memória
![Page 395: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/395.jpg)
12-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Sintaxe da Instrução CREATE SEQUENCE
Defina uma seqüência para gerar números seqüenciaisautomaticamente:
CREATE SEQUENCE seqüência [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
CREATE SEQUENCE seqüência [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
![Page 396: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/396.jpg)
12-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma Seqüência
� Crie uma seqüência denominada DEPT_DEPTID_SEQpara ser usada na chave primária da tabelaDEPARTMENTS.
� Não use a opção CYCLE.
CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;Sequence created.
CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;Sequence created.Sequence created.
![Page 397: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/397.jpg)
12-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Confirmando Seqüências
� Verifique seus valores de seqüência na tabela dedicionário de dados USER_SEQUENCES.
� A coluna LAST_NUMBER exibirá o próximo númerode seqüência disponível se NOCACHE forespecificado.
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM user_sequences;
SELECT sequence_name, min_value, max_value, increment_by, last_number
FROM user_sequences;
![Page 398: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/398.jpg)
12-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Pseudocolunas NEXTVAL e CURRVAL
� NEXTVAL retorna o próximo valor de seqüênciadisponível. Ela retorna um valor exclusivo sempreque é feita referência a ela, até mesmo paradiferentes usuários.
� CURRVAL obtém o valor de seqüência atual.� NEXTVAL deve ser emitido para a seqüência
antes que CURRVAL contenha um valor.
![Page 399: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/399.jpg)
12-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Seqüência
� Insira um novo departamento denominado"Support" no ID de local 2500.
� Exiba o valor atual da seqüência DEPT_DEPTID_SEQ.
INSERT INTO departments(department_id, department_name, location_id)VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.
INSERT INTO departments(department_id, department_name, location_id)VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.1 row created.
SELECT dept_deptid_seq.CURRVALFROM dual;
SELECT dept_deptid_seq.CURRVALFROM dual;
![Page 400: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/400.jpg)
12-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Seqüência
� Se os valores de seqüência forem armazenados nocache na memória, o acesso a eles será mais rápido.
� Podem ocorrer intervalos em valores de seqüênciaquando:� Ocorre um rollback� Ocorre uma falha no sistema� Uma seqüência é usada em outra tabela
� Se a seqüência tiver sido criada com NOCACHE, exibao próximo valor disponível, consultando a tabelaUSER_SEQUENCES.
![Page 401: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/401.jpg)
12-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Modificando uma Seqüência
Altere o valor de incremento, o valor máximo, o valormínimo, a opção de ciclo ou a opção de cache.
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;Sequence altered.
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;Sequence altered.Sequence altered.
![Page 402: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/402.jpg)
12-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Diretrizes para Modificar uma Seqüência
� Você deve ser o proprietário ou ter o privilégioALTER referente à seqüência.
� Somente os números de seqüência futuros sãoafetados.
� A seqüência deve ser eliminada e recriada paraque seja reiniciada em um número diferente.
� Um certo grau de validação é executado.
![Page 403: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/403.jpg)
12-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Removendo uma Seqüência
� Remova uma seqüência do dicionário de dadosusando a instrução DROP SEQUENCE.
� Após remover a seqüência, você não poderá maisfazer referência a ela.
DROP SEQUENCE dept_deptid_seq;Sequence dropped.
DROP SEQUENCE dept_deptid_seq;Sequence dropped.Sequence dropped.
![Page 404: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/404.jpg)
12-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que é um Índice?
Um índice:� É um objeto de esquema� É usado pelo servidor Oracle para acelerar a
recuperação de linhas usando um ponteiro� Pode reduzir a E/S do disco usando um método
de acesso rápido a caminhos a fim de localizaros dados rapidamente
� É independente da tabela que indexa� É usado e mantido automaticamente pelo
servidor Oracle
![Page 405: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/405.jpg)
12-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Como os Índices São Criados?
� Automaticamente: um índice exclusivo é criadoautomaticamente quando você define umarestrição de PRIMARY KEY ou UNIQUE KEY emuma definição de tabela.
� Manualmente: os usuários podem criar índicesnão exclusivos em colunas para acelerar o acessoàs linhas.
![Page 406: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/406.jpg)
12-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando um Índice
� Crie um índice em uma ou mais colunas.
� Aumente a velocidade de acesso de consulta àcoluna LAST_NAME da tabela EMPLOYEES.
CREATE INDEX emp_last_name_idxON employees(last_name);Index created.
CREATE INDEX emp_last_name_idxON employees(last_name);Index created.Index created.
CREATE INDEX índiceON tabela (coluna[, coluna]...);
CREATE INDEX índiceON tabela (coluna[, coluna]...);
![Page 407: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/407.jpg)
12-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Quando Criar um Índice
Você deverá criar um índice se:� Uma coluna contiver uma ampla faixa de valores� Uma coluna contiver um grande número de
valores nulos� Uma ou mais colunas forem usadas juntas com
freqüência em uma cláusula WHERE ou em umacondição de junção
� A tabela for grande e a expectativa for de quea maioria das consultas recuperará menos que2 a 4% das linhas
![Page 408: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/408.jpg)
12-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Quando Não Criar um Índice
Geralmente, não será vantajoso criar um índice se:� A tabela for pequena� As colunas não forem utilizadas com freqüência
como uma condição na consulta� A expectativa for de que a maioria das consultas
recuperará mais que 2 a 4% das linhas da tabela� A tabela for atualizada com freqüência� Forem feitas referências às colunas indexadas
como parte de uma expressão
![Page 409: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/409.jpg)
12-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT ic.index_name, ic.column_name,ic.column_position col_pos,ix.uniqueness
FROM user_indexes ix, user_ind_columns icWHERE ic.index_name = ix.index_nameAND ic.table_name = 'EMPLOYEES';
Confirmando Índices
� A view de dicionário de dados USER_INDEXEScontém o nome do índice e sua exclusividade.
� A view USER_IND_COLUMNS contém os nomesdo índice, da tabela e da coluna.
![Page 410: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/410.jpg)
12-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Índices Baseados em Função
� Um índice baseado em função é aquele que sebaseia em expressões.
� Uma expressão de índice é elaborada a partir decolunas de tabela, constantes, funções SQL efunções definidas pelo usuário.
CREATE INDEX upper_dept_name_idxON departments(UPPER(department_name));
Index created.
SELECT * FROM departmentsWHERE UPPER(department_name) = 'SALES';
![Page 411: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/411.jpg)
12-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Removendo um Índice
� Remova um índice do dicionário de dadosusando o comando DROP INDEX.
� Remova o índice UPPER_LAST_NAME_IDXdo dicionário de dados.
� Para eliminar um índice, você deve ser oproprietário do índice ou ter o privilégioDROP ANY INDEX.
DROP INDEX upper_last_name_idx;Index dropped.
DROP INDEX upper_last_name_idx;Index dropped.Index dropped.
DROP INDEX índice;DROP INDEX índice;
![Page 412: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/412.jpg)
12-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Sinônimos
Simplifique o acesso aos objetos criando um sinônimo(outro nome para um objeto). Com os sinônimos, vocêpode:� Referir-se facilmente a uma tabela de propriedade
de outro usuário� Abreviar nomes de objeto longos
CREATE [PUBLIC] SYNONYM sinônimoFOR objeto;
CREATE [PUBLIC] SYNONYM sinônimoFOR objeto;
![Page 413: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/413.jpg)
12-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando e Removendo Sinônimos
� Crie um nome abreviado para a viewDEPT_SUM_VU.
� Elimine um sinônimo.
CREATE SYNONYM d_sumFOR dept_sum_vu;Synonym Created.
CREATE SYNONYM d_sumFOR dept_sum_vu;Synonym Created.Synonym Created.
DROP SYNONYM d_sum;Synonym dropped.
DROP SYNONYM d_sum;Synonym dropped.Synonym dropped.
![Page 414: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/414.jpg)
12-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Gerar números de seqüência automaticamente
usando um gerador de seqüência� Exibir informações sobre seqüências na tabela
de dicionário de dados USER_SEQUENCES� Criar índices para melhorar a velocidade de
recuperação da consulta� Exibir informações sobre índices na tabela
de dicionário USER_INDEXES� Usar sinônimos para criar nomes alternativos
de objetos
![Page 415: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/415.jpg)
12-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 12
Este exercício abrange os seguintes tópicos:� Criando seqüências� Usando seqüências� Criando índices não-exclusivos� Exibindo informações do dicionário de dados
sobre seqüências e índices� Eliminando índices
![Page 416: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/416.jpg)
13Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Controlando o Acesso do Usuário
![Page 417: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/417.jpg)
13-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Criar usuários� Criar funções para facilitar a configuração e
manutenção do modelo de segurança� Usar as instruções GRANT e REVOKE para conceder
e revogar privilégios de objeto� Criar e acessar vínculos de banco de dados
![Page 418: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/418.jpg)
13-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Controlando o Acesso do UsuárioControlando o Acesso do Usuário
Administrador debanco de dados
Usuários
Nome de usuário e senhaPrivilégios
![Page 419: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/419.jpg)
13-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Privilégios
� Segurança de banco de dados:� Segurança de sistema� Segurança de dados
� Privilégios de sistema: obtendo acesso ao bancode dados
� Privilégios de objeto: manipulando o conteúdodos objetos de banco de dados
� Esquemas: coleções de objetos, como tabelas,views e seqüências
![Page 420: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/420.jpg)
13-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Privilégios de Sistema
� Há mais de 100 privilégios disponíveis.� O administrador de banco de dados tem privilégios
de sistema de alto nível para tarefas como:� Criar novos usuários� Remover usuários� Remover tabelas� Fazer backup de tabelas
![Page 421: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/421.jpg)
13-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Usuários
O DBA cria usuários utilizando a instrução CREATE USER.
CREATE USER scottIDENTIFIED BY tiger;User created.
CREATE USER scottIDENTIFIED BY tiger;User created.User created.
CREATE USER usuário IDENTIFIED BY senha;
![Page 422: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/422.jpg)
13-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Privilégios de Sistema do Usuário
� Quando o usuário é criado, o DBA pode conceder aele privilégios de sistema específicos.
� Por exemplo, um desenvolvedor de aplicações podeter os seguintes privilégios de sistema:– CREATE SESSION
– CREATE TABLE
– CREATE SEQUENCE
– CREATE VIEW
– CREATE PROCEDURE
GRANT privilégio [, privilégio...]TO usuário [, usuário| atribuição, PUBLIC...];
GRANT privilégio [, privilégio...]TO usuário [, usuário| atribuição, PUBLIC...];
![Page 423: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/423.jpg)
13-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Concedendo Privilégios de Sistema
O DBA pode conceder a um usuário privilégios desistema específicos.
GRANT create session, create table, create sequence, create viewTO scott;Grant succeeded.
GRANT create session, create table, create sequence, create viewTO scott;Grant succeeded.Grant succeeded.
![Page 424: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/424.jpg)
13-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que é uma Atribuição?O que é uma Atribuição?
Alocando privilégiossem uma atribuição
Alocando privilégioscom uma atribuição
Privilégios
Usuários
Gerente
![Page 425: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/425.jpg)
13-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando e ConcedendoPrivilégios a uma Atribuição
Criando e ConcedendoPrivilégios a uma Atribuição
CREATE ROLE manager;Role created.
CREATE ROLE manager;Role created.Role created.
GRANT create table, create view TO manager; Grant succeeded.
GRANT create table, create view TO manager; Grant succeeded.Grant succeeded.
GRANT manager TO DEHAAN, KOCHHAR; Grant succeeded.
GRANT manager TO DEHAAN, KOCHHAR; Grant succeeded.Grant succeeded.
� Criar uma atribuição
� Conceder privilégios a uma atribuição
� Conceder uma atribuição aos usuários
![Page 426: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/426.jpg)
13-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Alterando sua Senha
� O DBA cria a sua conta de usuário e inicializa asua senha.
� Você pode alterar sua senha usando a instruçãoALTER USER.
ALTER USER scott IDENTIFIED BY lion;User altered.User altered.
![Page 427: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/427.jpg)
13-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Privilégio de Objeto Tabela View Seqüência Procedimento
ALTER √√√√ √√√√
DELETE √√√√ √√√√
EXECUTE √√√√
INDEX √√√√
INSERT √√√√ √√√√
REFERENCES √√√√ √√√√
SELECT √√√√ √√√√ √√√√
UPDATE √√√√ √√√√
Privilégios de ObjetoPrivilégios de Objeto
![Page 428: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/428.jpg)
13-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Privilégios de Objeto
� Os privilégios variam de um objeto para outro.� Um proprietário tem todos os privilégios sobre
o objeto.� Um proprietário pode conceder privilégios
específicos sobre seus objetos.
GRANT priv_objeto [(colunas)] ON objeto TO {usuário|atribuição|PUBLIC} [WITH GRANT OPTION];
GRANT priv_objeto [(colunas)] ON objeto TO {usuário|atribuição|PUBLIC} [WITH GRANT OPTION];
![Page 429: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/429.jpg)
13-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Concedendo Privilégios de Objeto
� Conceder privilégios de consulta na tabela EMPLOYEES
� Conceder aos usuários e atribuições privilégios paraatualizar colunas específicas
GRANT selectON employeesTO sue, rich;Grant succeeded.
GRANT selectON employeesTO sue, rich;Grant succeeded.Grant succeeded.
GRANT update (department_name, location_id)ON departmentsTO scott, manager;Grant succeeded.
GRANT update (department_name, location_id)ON departmentsTO scott, manager;Grant succeeded.Grant succeeded.
![Page 430: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/430.jpg)
13-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando as Palavras-ChaveWITH GRANT OPTION e PUBLIC
� Dar autoridade a um usuário para repassar osprivilégios
� Permitir que todos os usuários do sistemaconsultem dados na tabela DEPARTMENTS de Alice
GRANT select, insertON departmentsTO scottWITH GRANT OPTION;Grant succeeded.
GRANT select, insertON departmentsTO scottWITH GRANT OPTION;Grant succeeded.Grant succeeded.
GRANT selectON alice.departmentsTO PUBLIC;Grant succeeded.
GRANT selectON alice.departmentsTO PUBLIC;Grant succeeded.Grant succeeded.
![Page 431: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/431.jpg)
13-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Confirmando Privilégios ConcedidosConfirmando Privilégios ConcedidosView de Dicionário de Dados DescriçãoROLE_SYS_PRIVS Privilégios de sistema concedidos
a atribuiçõesROLE_TAB_PRIVS Privilégios de tabela concedidos
a atribuiçõesUSER_ROLE_PRIVS Atribuições acessíveis ao usuárioUSER_TAB_PRIVS_MADE Privilégios de objeto concedidos
sobre os objetos do usuárioUSER_TAB_PRIVS_RECD Privilégios de objeto concedidos ao
usuárioUSER_COL_PRIVS_MADE Privilégios de objeto concedidos
sobre as colunas dos objetos dousuário
USER_COL_PRIVS_RECD Privilégios de objeto concedidos aousuário sobre colunas específicas
USER_SYS_PRIVS Lista os privilégios de sistema concedidos ao usuário
![Page 432: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/432.jpg)
13-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Como Revogar Privilégios de Objeto
� Use a instrução REVOKE para revogar os privilégiosconcedidos a outros usuários.
� Os privilégios concedidos a outros usuários pormeio da cláusula WITH GRANT OPTION tambémserão revogados.
REVOKE {privilégio [, privilégio...]|ALL}ON objetoFROM {usuário[, usuário...]|atribuição|PUBLIC}[CASCADE CONSTRAINTS];
REVOKE {privilégio [, privilégio...]|ALL}ON objetoFROM {usuário[, usuário...]|atribuição|PUBLIC}[CASCADE CONSTRAINTS];
![Page 433: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/433.jpg)
13-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revogando Privilégios de Objeto
No papel da usuária Alice, revogue os privilégiosSELECT e INSERT concedidos ao usuário Scott natabela DEPARTMENTS.
REVOKE select, insertON departmentsFROM scott;Revoke succeeded.
REVOKE select, insertON departmentsFROM scott;Revoke succeeded.Revoke succeeded.
![Page 434: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/434.jpg)
13-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Vínculos de Banco de Dados
Uma conexão de vínculo de banco de dados permiteque os usuários locais acessem dados em um bancode dados remoto.
Local Remoto
SELECT * FROMemp@HQ_ACME.COM;
Banco de dadosHQ_ACME.COM
Tabela EMP
![Page 435: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/435.jpg)
13-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Vínculos de Banco de Dados
� Criar o vínculo de banco de dados
� Criar instruções SQL que utilizem o vínculo debanco de dados
CREATE PUBLIC DATABASE LINK hq.acme.com USING 'sales';Database link created.
CREATE PUBLIC DATABASE LINK hq.acme.com USING 'sales';Database link created.
SELECT * FROM [email protected];
SELECT * FROM [email protected];
![Page 436: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/436.jpg)
13-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ResumoResumo
Instrução AçãoCREATE USER Cria um usuário (geralmente executada por
um DBA)GRANT Concede a outros usuários privilégios para
acessar objetosCREATE ROLE Cria um conjunto de privilégios (geralmente
executada por um DBA)ALTER USER Altera a senha de um usuárioREVOKE Remove dos usuários os privilégios
referentes a um objeto
Nesta lição, você aprendeu detalhes sobre as instruçõesDCL que controlam o acesso ao banco de dados e aosrespectivos objetos:
![Page 437: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/437.jpg)
13-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 13
Este exercício abrange os seguintes tópicos:� Concedendo a outros usuários privilégios sobre
uma tabela� Modificando a tabela de outro usuário através de
privilégios concedidos a você� Criando um sinônimo� Consultando as views de dicionário de dados
relacionadas aos privilégios
![Page 438: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/438.jpg)
14Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SQL Workshop
![Page 439: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/439.jpg)
14-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Workshop
Este workshop abrange:� Criação de tabelas e de seqüências� Modificação de dados nas tabelas� Modificação de definições de tabelas� Criação de views� Criação de scripts que contenham comandos SQL
e iSQL*Plus� Geração de um relatório simples
![Page 440: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/440.jpg)
15Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Operadores SET
![Page 441: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/441.jpg)
15-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever os operadores SET� Usar um operador SET para combinar várias consultas
em uma consulta simples� Controlar a ordem das linhas retornadas
![Page 442: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/442.jpg)
15-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Os Operadores SETA B
UNION/UNION ALL
A B
A B
INTERSECT
A B
MINUS
![Page 443: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/443.jpg)
15-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tabelas Usadas nesta Lição
As tabelas usadas nesta lição são:� EMPLOYEES: fornece os detalhes relativos a todos os
funcionários atuais� JOB_HISTORY: registra os detalhes da data inicial e
da data final do cargo anterior, além do número deidentificação do cargo e do departamento, quandoum funcionário muda de cargo
![Page 444: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/444.jpg)
15-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Operador UNION
OO operador operador UNIONUNION retorna resultadosretorna resultados de de duas duas consultasconsultasapapós eliminar duplicaós eliminar duplicaççõesões..
A B
![Page 445: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/445.jpg)
15-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador UNION
Exiba os detalhes dos cargos anterior e atual de todos osfuncionários. Exiba cada funcionário somente uma vez.SELECT employee_id, job_idFROM employeesUNIONSELECT employee_id, job_idFROM job_history;
��
![Page 446: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/446.jpg)
15-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Operador UNION ALLA B
O operador UNION ALL retorna resultados das duasconsultas, incluindo todas as duplicações.OO operador operador UNION ALLUNION ALL retorna resultados das duasretorna resultados das duasconsultasconsultas,, incluindo todas incluindo todas as as duplica duplicaççõesões..
![Page 447: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/447.jpg)
15-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador UNION ALL
Exiba os departamentos anterior e atual de todos osfuncionários.SELECT employee_id, job_id, department_idFROM employeesUNION ALLSELECT employee_id, job_id, department_idFROM job_history ORDER BY employee_id;
�
�
![Page 448: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/448.jpg)
15-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Operador INTERSECT
A B
![Page 449: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/449.jpg)
15-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador INTERSECT
Exiba os IDs de funcionário e os IDs de cargo dosfuncionários com o mesmo cargo que ocupavam antesdo início do período de permanência na empresa.
SELECT employee_id, job_idFROM employeesINTERSECTSELECT employee_id, job_idFROM job_history;
![Page 450: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/450.jpg)
15-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Operador MINUS
A B
![Page 451: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/451.jpg)
15-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Operador MINUS
Exiba os IDs dos funcionários que nunca mudaram decargo.Exiba osExiba os IDs dos IDs dos funcion funcionários que nunca mudaramários que nunca mudaram de decargo.cargo.SELECT employee_id,job_idFROM employeesMINUSSELECT employee_id,job_idFROM job_history;
�
![Page 452: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/452.jpg)
15-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Diretrizes do Operador SET
� As expressões nas listas SELECT devem corresponderem número e tipo de dados.
� É possível usar parênteses para alterar a seqüência deexecução.
� A cláusula ORDER BY:� Pode aparecer somente no final da instrução� Aceitará o nome da coluna, os apelidos da primeira
instrução SELECT ou a notação posicional
![Page 453: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/453.jpg)
15-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Oracle Server e os Operadores SET
� As linhas duplicadas são eliminadas automaticamente,exceto em UNION ALL.
� Os nomes das colunas na primeira consulta aparecemno resultado.
� A saída é classificada em ordem crescente por default,exceto em UNION ALL.
![Page 454: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/454.jpg)
15-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Correspondendo às Instruções SELECTCom oCom o operador operador UNIONUNION, s, são exibidosão exibidos o ID do o ID do departamento departamento,,o local e a data deo local e a data de admiss admissãoão de de todos os funcion todos os funcionáriosários..SELECT department_id, TO_NUMBER(null) location, hire_dateFROM employeesUNIONSELECT department_id, location_id, TO_DATE(null)FROM departments;
�
![Page 455: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/455.jpg)
15-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Correspondendo à Instrução SELECT
� Com o operador UNION, são exibidos o ID defuncionário, o ID de cargo e o salário de todosos funcionários.
SELECT employee_id, job_id,salaryFROM employeesUNIONSELECT employee_id, job_id,0FROM job_history;
�
![Page 456: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/456.jpg)
15-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Controlando a Ordem das Linhas
Produza uma frase em inglês com dois operadores UNION.COLUMN a_dummy NOPRINTSELECT 'sing' AS "My dream", 3 a_dummyFROM dualUNIONSELECT 'I''d like to teach', 1FROM dualUNIONSELECT 'the world to', 2FROM dualORDER BY 2;
![Page 457: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/457.jpg)
15-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Usar UNION para retornar todas as linhas distintas� Usar UNION ALL para retornar todas as linhas,
incluindo as linhas duplicadas� Usar INTERSECT para retornar todas as linhas
compartilhadas pelas duas consultas� Usar MINUS para retornar todas as linhas distintas
selecionadas pela primeira consulta, mas não pelasegunda
� Usar ORDER BY somente no final da instrução
![Page 458: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/458.jpg)
15-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 15
Este exercício abrange o uso das funções de data/horáriodo Oracle9i.
![Page 459: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/459.jpg)
16Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Funções de Data/Horário do Oracle9i
![Page 460: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/460.jpg)
16-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ObjetivosApós concluir esta lição, você poderá usar as seguintesfunções de data/horário:� TZ_OFFSET
� CURRENT_DATE
� CURRENT_TIMESTAMP
� LOCALTIMESTAMP
� DBTIMEZONE
� SESSIONTIMEZONE
� EXTRACT
� FROM_TZ
� TO_TIMESTAMP
� TO_TIMESTAMP_TZ
� TO_YMINTERVAL
![Page 461: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/461.jpg)
16-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
FUSOS HORÁRIOS
-08:00
A imagem representa o horário emcada fuso horário quando forem12:00 no horário de Greenwich.
A imagem representa o horário emcada fuso horário quando forem12:00 no horário de Greenwich.
-05:00+02:00 +10:00
+07:00
![Page 462: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/462.jpg)
16-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Suporte a Data/Horário do Oracle9i
� No Oracle9i, você pode incluir o fuso horário nosseus dados de data e horário e fornecer suportepara segundos fracionários.
� Foram adicionados três novos tipos de dados aDATE:
� TIMESTAMP
� TIMESTAMP WITH TIME ZONE (TSTZ)
� TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ)
� O Oracle9i fornece suporte ao horário de verãopara os tipos de dados de data/horário no servidor.
![Page 463: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/463.jpg)
16-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
TZ_OFFSET
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;
SELECT TZ_OFFSET('Canada/Yukon') FROM DUAL;
SELECT TZ_OFFSET('Europe/London') FROM DUAL;
� Exibir o deslocamento do fuso horário 'US/Eastern'
� Exibir o deslocamento do fuso horário 'Canada/Yukon'
� Exibir o deslocamento do fuso horário 'Europe/London'
![Page 464: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/464.jpg)
16-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CURRENT_DATE
� CURRENT_DATE distingue o fuso horário da sessão.� O valor retornado é uma data do calendário gregoriano.
ALTER SESSION SET TIME_ZONE = '-8:0';SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-5:0';SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
� Exibir a data e o horário atuais no fuso horário da sessãoALTER SESSIONSET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
![Page 465: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/465.jpg)
16-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CURRENT_TIMESTAMP
ALTER SESSION SET TIME_ZONE = '-8:0';SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-5:0';SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;
� Exibir a data atual e o horário fracionário no fuso horárioda sessão
� CURRENT_TIMESTAMP distingue o fuso horário da sessão.� O valor retornado é do tipo de dados TIMESTAMP WITH
TIME ZONE.
![Page 466: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/466.jpg)
16-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
LOCALTIMESTAMP
ALTER SESSION SET TIME_ZONE = '-5:0';SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-8:0';SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;
� Exibir a data e o horário atuais no fuso horário dasessão em um valor de tipo de dados TIMESTAMP
� LOCALTIMESTAMP retorna um valor TIMESTAMP,enquanto CURRENT_TIMESTAMP retorna um valorTIMESTAMP WITH TIME ZONE.
![Page 467: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/467.jpg)
16-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
DBTIMEZONE e SESSIONTIMEZONE
SELECT DBTIMEZONE FROM DUAL;
SELECT SESSIONTIMEZONE FROM DUAL;
� Exibir o valor do fuso horário do banco de dados
� Exibir o valor do fuso horário da sessão
![Page 468: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/468.jpg)
16-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
EXTRACT
SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;
SELECT last_name, hire_date, EXTRACT (MONTH FROM HIRE_DATE)FROM employeesWHERE manager_id = 100;
� Exibir o componente YEAR de SYSDATE.
� Exibir o componente MONTH de HIRE_DATE para osfuncionários cujo MANAGER_ID é 100.
![Page 469: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/469.jpg)
16-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de TIMESTAMP Usando FROM_TZ
SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00','3:00')FROM DUAL;
� Exibir o valor de TIMESTAMP '2000-03-28 08:00:00'como um valor TIMESTAMP WITH TIME ZONE
SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', 'Australia/North')FROM DUAL;
� Exibir o valor de TIMESTAMP '2000-03-28 08:00:00'como um valor TIMESTAMP WITH TIME ZONE paraa região de fuso horário 'Australia/North'
![Page 470: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/470.jpg)
16-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00', 'YYYY-MM-DD HH:MI:SS TZH:TZM')FROM DUAL;
Conversão de STRING em TIMESTAMP UsandoTO_TIMESTAMP e TO_TIMESTAMP_TZ
SELECT TO_TIMESTAMP ('2000-12-01 11:00:00', 'YYYY-MM-DD HH:MI:SS')FROM DUAL;
� Exibir a string de caracteres '2000-12-01 11:00:00'como um valor de TIMESTAMP
� Exibir a string de caracteres '1999-12-01 11:00:00 -8:00'como um valor de TIMESTAMP WITH TIME ZONE
![Page 471: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/471.jpg)
16-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conversão de Intervalo de Tempocom TO_YMINTERVAL
SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') AS HIRE_DATE_YMININTERVALFROM EMPLOYEESWHERE department_id = 20;
� Exibir uma data um ano e dois meses posterior àdata de admissão dos funcionários que trabalhamno departamento com DEPARTMENT_ID 20
![Page 472: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/472.jpg)
16-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
� TZ_OFFSET
� FROM_TZ
� TO_TIMESTAMP
� TO_TIMESTAMP_TZ
� TO_YMINTERVAL
� CURRENT_DATE
� CURRENT_TIMESTAMP
� LOCALTIMESTAMP
� DBTIMEZONE
� SESSIONTIMEZONE
� EXTRACT
Nesta lição, você aprendeu a usar as seguintes funções:Nesta lição, você aprendeu a usar as seguintes funções:
![Page 473: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/473.jpg)
16-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 16
Este exercício abrange o uso das funções dedata/horário no Oracle9i.
![Page 474: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/474.jpg)
17Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Aperfeiçoamentos da CláusulaGROUP BY
![Page 475: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/475.jpg)
17-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Usar a operação ROLLUP para produzir valores de
subtotais � Usar a operação CUBE para produzir valores de
tabulação cruzada� Usar a função GROUPING para identificar os valores
de linhas criados por uma operação ROLLUP ou CUBE� Usar GROUPING SETS para produzir um conjunto de
resultados simples
![Page 476: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/476.jpg)
17-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revisão de Funções de Grupo
As funções de grupo operam em conjuntos de linhaspara fornecer um resultado por grupo.
SELECT [coluna,] função_de_grupo(coluna). . .FROM tabela[WHERE condição][GROUP BY expressão_group_by][ORDER BY coluna];
SELECT AVG(salary), STDDEV(salary),COUNT(commission_pct),MAX(hire_date)
FROM employeesWHERE job_id LIKE 'SA%';
Exemplo:Exemplo:
![Page 477: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/477.jpg)
17-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revisão da Cláusula GROUP BY
SELECT department_id, job_id, SUM(salary), COUNT(employee_id)
FROM employeesGROUP BY department_id, job_id ;
SELECT [coluna,]FROM tabela[WHERE condição][GROUP BY expressão_group_by][ORDER BY coluna];
Exemplo:Exemplo:
Sintaxe:Sintaxe:função_de_grupo(coluna). . .
![Page 478: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/478.jpg)
17-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revisão da Cláusula HAVING
� Use a cláusula HAVING para especificar os grupos que devem ser exibidos.
� Restrinja os grupos com base em uma condição de limite.
SELECT [coluna,] função_de_grupo(coluna). . .FROM tabela[WHERE condição][GROUP BY expressão_group_by][HAVING expressão_having] [ORDER BY coluna];
![Page 479: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/479.jpg)
17-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
GROUP BY com os Operadores ROLLUP e CUBE
� Use os operadores ROLLUP ou CUBE com a cláusula GROUP BY para produzir linhas superagregadas pela referência cruzada de colunas.
� O agrupamento ROLLUP produz um conjunto de resultados que contém as linhas agrupadas normais e os valores de subtotais.
� O agrupamento CUBE produz um conjunto de resultados que contém as linhas de ROLLUP e as linhas de tabulação cruzada.
![Page 480: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/480.jpg)
17-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Operador ROLLUP
� ROLLUP é uma extensão da cláusula GROUP BY.� Use a operação ROLLUP para produzir agregados
cumulativos, como subtotais.
SELECT [coluna,] função_de_grupo(coluna). . .FROM tabela[WHERE condição][GROUP BY [ROLLUP] expressão_group_by][HAVING expressão_having];[ORDER BY coluna];
![Page 481: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/481.jpg)
17-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Operador ROLLUP
SELECT department_id, job_id, SUM(salary)FROM employeesWHERE department_id < 60GROUP BY ROLLUP(department_id, job_id);
1 2
3
![Page 482: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/482.jpg)
17-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Operador CUBE
� CUBE é uma extensão da cláusula GROUP BY.� Você pode usar o operador CUBE para produzir valores
de tabulação cruzada com uma instrução SELECTsimples.
SELECT [coluna,] função_de_grupo(coluna). . .FROM tabela[WHERE condição][GROUP BY [CUBE] expressão_group_by][HAVING expressão_having] [ORDER BY coluna];
![Page 483: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/483.jpg)
17-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Operador CUBE: Exemplo
SELECT department_id, job_id, SUM(salary)FROM employeesWHERE department_id < 60GROUP BY CUBE (department_id, job_id) ;
12
3
4
![Page 484: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/484.jpg)
17-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Função GROUPING
� É possível usar a função GROUPING com o operador CUBE ou ROLLUP.
� Com a função GROUPING, você pode localizar os grupos que formam o subtotal em uma linha.
� Com a função GROUPING, você pode diferenciar valores NULL armazenados de valores NULL criados pelo operador ROLLUP ou CUBE.
� A função GROUPING retorna 0 ou 1.
SELECT [coluna,] função_de_grupo(coluna) . ,GROUPING(expr)
FROM tabela[WHERE condição][GROUP BY [ROLLUP][CUBE] expressão_group_by][HAVING expressão_having] [ORDER BY coluna];
![Page 485: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/485.jpg)
17-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Função GROUPING: Exemplo
SELECT department_id DEPTID, job_id JOB, SUM(salary),GROUPING(department_id) GRP_DEPT,GROUPING(job_id) GRP_JOB
FROM employeesWHERE department_id < 50GROUP BY ROLLUP(department_id, job_id);
21
3
![Page 486: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/486.jpg)
17-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
GROUPING SETS
� GROUPING SETS é uma extensão adicional da cláusulaGROUP BY.
� Você pode usar GROUPING SETS para definir vários agrupamentos na mesma consulta.
� O Oracle Server calcula todos os agrupamentos especificados na cláusula GROUPING SETS e combina os resultados de agrupamentos individuais com uma operação UNION ALL.
� Eficiência do conjunto de agrupamentos:� É necessária apenas uma análise da tabela-base.� Não é necessário criar instruções UNION complexas.� Quanto mais elementos a cláusula GROUPING SETS
tiver, maior será o desempenho.
![Page 487: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/487.jpg)
17-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
GROUPING SETS: Exemplo
SELECT department_id, job_id, manager_id,avg(salary)
FROM employeesGROUP BY GROUPING SETS ((department_id,job_id), (job_id,manager_id));
�1
2
![Page 488: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/488.jpg)
17-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Colunas Compostas
� Uma coluna composta é um conjunto de colunas tratadas como uma unidade.ROLLUP (a, , d)
� Para especificar colunas compostas, use a cláusula GROUP BY a fim de agrupar colunas entre parênteses de modo que o servidor Oracle trate essas colunas como uma unidade quando calcula operações ROLLUPou CUBE.
� Quando usadas com ROLLUP ou CUBE, as colunas compostas significam que a agregação é ignorada em alguns níveis.
(b,c)(b,c)(b,c)
![Page 489: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/489.jpg)
17-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Colunas Compostas: Exemplo
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employees GROUP BY ROLLUP( department_id,(job_id, manager_id));
21
3�
![Page 490: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/490.jpg)
17-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Agrupamentos Concatenados
� Os agrupamentos concatenados oferecem uma maneira concisa de gerar combinações de agrupamentos úteis.
� Para especificar conjuntos de agrupamentos concatenados, separe vários conjuntos de agrupamentos e operações ROLLUP e CUBE por vírgulas de modo que o Oracle Server combine-os em uma cláusula GROUP BY simples.
� O resultado é um produto híbrido de agrupamentos de cada conjunto de agrupamentos.GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)
![Page 491: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/491.jpg)
17-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
�
�
�
Exemplo de Agrupamentos Concatenados
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employeesGROUP BY department_id,
ROLLUP(job_id),CUBE(manager_id);
�
�
�
1
2
3
4
![Page 492: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/492.jpg)
17-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Usar a operação ROLLUP para produzir valores de
subtotais � Usar a operação CUBE para produzir valores de
tabulação cruzada� Usar a função GROUPING para identificar os valores de
linhas criados por uma operação ROLLUP ou CUBE� Usar a sintaxe GROUPING SETS para definir vários
agrupamentos na mesma consulta� Usar a cláusula GROUP BY para combinar expressões
de várias maneiras:� Colunas compostas� Conjuntos de agrupamentos concatenados
![Page 493: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/493.jpg)
17-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 17
Este exercício abrange os seguintes tópicos:� Uso do operador ROLLUP� Uso do operador CUBE� Uso da função GROUPING� Uso de GROUPING SETS
![Page 494: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/494.jpg)
18Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas Avançadas
![Page 495: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/495.jpg)
18-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ObjetivosApós concluir esta lição, você poderá fazer o seguinte:� Criar uma subconsulta de várias colunas� Descrever e explicar o comportamento de subconsultas
quando valores nulos são recuperados� Criar uma subconsulta em uma cláusula FROM� Usar subconsultas escalares em SQL� Descrever os tipos de problemas que as subconsultas
correlacionadas podem solucionar� Criar subconsultas correlacionadas� Atualizar e deletar linhas usando subconsultas
correlacionadas� Usar os operadores EXISTS e NOT EXISTS� Usar a cláusula WITH
![Page 496: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/496.jpg)
18-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O que é uma Subconsulta?
Uma subconsulta é uma instrução SELECT incorporada a uma cláusula de outra instrução SQL.
SELECT ...FROM ...WHERE ...
(SELECT ...FROM ...WHERE ...)
ConsultaConsultaprincipalprincipal
SubconsultaSubconsulta
![Page 497: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/497.jpg)
18-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas
� A subconsulta (consulta interna) é executada uma vez antes da consulta principal.
� O resultado da subconsulta é usado pela consulta principal (consulta externa).
SELECT lista_de_seleçãoFROM tabelaWHERE expr operador (SELECT lista_de_seleção
FROM tabela);
![Page 498: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/498.jpg)
18-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando uma Subconsulta
SELECT last_nameFROM employeesWHERE salary >
(SELECT salaryFROM employeesWHERE employee_id = 149) ;
10500
![Page 499: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/499.jpg)
18-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas de Várias Colunas
Consulta principalWHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subconsulta100 90102 60124 50
Cada linha da consulta principal Cada linha da consulta principal é comparada a valores é comparada a valores de uma subconsulta de vde uma subconsulta de várias linhas e colunas.árias linhas e colunas.
![Page 500: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/500.jpg)
18-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comparações de Coluna
As comparações de coluna em uma subconsulta de várias colunas podem ser:� Comparações emparelhadas� Comparações não-emparelhadas
![Page 501: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/501.jpg)
18-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsulta de Comparação Emparelhada
Exiba os detalhes dos funcionários que são gerenciados pelo mesmo gerente e que trabalham no mesmo departamento que os funcionários com EMPLOYEE_ID178 ou 174.
SELECT employee_id, manager_id, department_idFROM employeesWHERE (manager_id, department_id) IN
(SELECT manager_id, department_idFROM employeesWHERE employee_id IN (178,174))
AND employee_id NOT IN (178,174);
![Page 502: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/502.jpg)
18-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsulta de Comparação Não-emparelhada
SELECT employee_id, manager_id, department_idFROM employeesWHERE manager_id IN
(SELECT manager_idFROM employeesWHERE employee_id IN (174,141))
AND department_id IN (SELECT department_idFROM employeesWHERE employee_id IN (174,141))
AND employee_id NOT IN(174,141);
Exiba os detalhes dos funcionários que são gerenciados pelo mesmo gerente e que trabalham no mesmo departamento que os funcionários com EMPLOYEE_ID174 ou 141.
![Page 503: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/503.jpg)
18-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT a.last_name, a.salary, a.department_id, b.salavg
FROM employees a, (SELECT department_id, AVG (salary) salavgFROM employeesGROUP BY department_id) b
WHERE a.department_id = b.department_idAND a.salary > b.salavg;
Usando uma Subconsulta na Cláusula FROM
![Page 504: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/504.jpg)
18-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Expressões de Subconsulta Escalar
� Uma expressão de subconsulta escalar é uma subconsulta que retorna exatamente um valor de coluna de uma linha.
� As subconsultas escalares eram suportadas no Oracle8i somente em um número limitado de casos, por exemplo, em:� Uma instrução SELECT (cláusulas FROM e WHERE)� Uma lista VALUES de uma instrução INSERT
� No Oracle9i, é possível usar subconsultas escalares em:� Uma condição e uma parte de expressão de
DECODE e CASE� Todas as cláusulas SELECT, exceto GROUP BY
![Page 505: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/505.jpg)
18-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas Escalares: ExemplosSubconsultas Escalares em Expressões CASE
SELECT employee_id, last_name,
(CASE
WHEN department_id =
THEN 'Canada' ELSE 'USA' END) location
FROM employees;
(SELECT department_id FROM departments
WHERE location_id = 1800)
Subconsultas Escalares em Cláusulas ORDER BYSubconsultas Escalares em Cláusulas ORDER BYSELECT employee_id, last_name
FROM employees e
ORDER BY
20
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
![Page 506: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/506.jpg)
18-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
USEvalores da consulta interna para
qualificar ou desqualificar a linha candidata
Subconsultas Correlacionadas
As subconsultas correlacionadas são usadas para processamento por linha. Cada subconsulta é executa uma vez para cada linha da consulta externa.
GETlinha candidata da consulta externa
EXECUTEconsulta interna que usa o valor
da linha candidata
![Page 507: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/507.jpg)
18-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Subconsultas Correlacionadas
SELECT coluna1, coluna2, ...FROM tabela1WHERE coluna1 operador
(SELECT coluna1, coluna2FROM tabela2WHERE expr1 =
.expr2);
A subconsulta faz referência a uma coluna de uma tabela na consulta mãe.A subconsulta faz referA subconsulta faz referência a uma coluna de uma tabela ência a uma coluna de uma tabela na consulta mna consulta mãe.ãe.
externa
Externa
![Page 508: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/508.jpg)
18-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT last_name, salary, department_idFROM employees outerWHERE salary >
Usando Subconsultas Correlacionadas
Sempre que uma linha da consulta externafor processada, aconsulta interna seráavaliada.
Localize todos os funcionários que ganham acima do salário médio de seus respectivos departamentos.
(SELECT AVG(salary)FROM employeesWHERE department_id =
outer.department_id) ;
![Page 509: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/509.jpg)
18-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando Subconsultas Correlacionadas
SELECT e.employee_id, last_name,e.job_id
FROM employees e
WHERE 2 <= (SELECT COUNT(*)
FROM job_history
WHERE employee_id = e.employee_id);
Exiba detalhes dos funcionários que mudaram de cargo no mínimo duas vezes.
![Page 510: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/510.jpg)
18-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o Operador EXISTS
� O operador EXISTS testa a existência de linhas no conjunto de resultados da subconsulta.
� Se o valor da linha de uma subconsulta for encontrado:� A pesquisa na consulta interna não continuará� A condição será indicada por um flag TRUE
� Se o valor de linha de uma subconsulta não for encontrado:� A condição será indicada por um flag FALSE� A pesquisa continuará na consulta interna
![Page 511: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/511.jpg)
18-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, department_idFROM employees outerWHERE EXISTS ( SELECT 'X'
FROM employeesWHERE manager_id =
outer.employee_id);
Usando o Operador EXISTS
Localize os funcionários com no mínimo uma pessoa subordinada a eles.
![Page 512: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/512.jpg)
18-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SELECT department_id, department_nameFROM departments dWHERE NOT EXISTS (SELECT 'X'
FROM employeesWHERE department_id
= d.department_id);
Usando o Operador NOT EXISTS
Localize todos os departamentos sem funcionários.
![Page 513: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/513.jpg)
18-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE Correlacionada
Use uma subconsulta correlacionada para atualizar as linhas de uma tabela com base nas linhas de outra tabela.
UPDATE tabela1 apelido1SET coluna = (SELECT expressão
FROM tabela2 apelido2WHERE apelido1.coluna =
apelido2.coluna);
![Page 514: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/514.jpg)
18-22 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
UPDATE Correlacionada
� Altere o padrão da tabela EMPLOYEES adicionando uma coluna para armazenar o nome do departamento.
� Preencha a tabela usando uma atualização correlacionada.
ALTER TABLE employeesADD(department_name VARCHAR2(14));
UPDATE employees eSET department_name =
(SELECT department_name FROM departments dWHERE e.department_id = d.department_id);
![Page 515: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/515.jpg)
18-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
DELETE FROM tabela1 apelido1WHERE coluna operador
(SELECT expressãoFROM tabela2 apelido2WHERE apelido1.coluna = apelido2.coluna);
DELETE Correlacionada
Use uma subconsulta correlacionada para deletar linhas de uma tabela com base nas linhas de outra tabela.
![Page 516: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/516.jpg)
18-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
DELETE FROM employees EWHERE employee_id =
(SELECT employee_idFROM emp_history WHERE employee_id = E.employee_id);
Use uma subconsulta correlacionada para deletar somente as linhas da tabela EMPLOYEES que também existem na tabela EMP_HISTORY.
DELETE Correlacionada
![Page 517: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/517.jpg)
18-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
A Cláusula WITH
� Com a cláusula WITH, você poderá usar o mesmo bloco de consultas em uma instrução SELECTquando ele ocorrer mais de uma vez em uma consulta complexa.
� A cláusula WITH recupera os resultados de um bloco de consultas e os armazena no tablespace temporário do usuário.
� A cláusula WITH melhora o desempenho.
![Page 518: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/518.jpg)
18-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Cláusula WITH: Exemplo
Com a cláusula WITH, crie uma consulta para exibir o nome do departamento e os salários totais dos departamentos cujo salário total é maior que o salário médio de todos os departamentos.
![Page 519: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/519.jpg)
18-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Cláusula WITH: Exemplo
WITH dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_totalFROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY d.department_name),
avg_cost AS (SELECT SUM(dept_total)/COUNT(*) AS dept_avgFROM dept_costs)
SELECT *FROM dept_costsWHERE dept_total >
(SELECT dept_avg FROM avg_cost)
ORDER BY department_name;
![Page 520: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/520.jpg)
18-30 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu que:� Uma subconsulta de várias colunas retorna mais de
uma coluna.� As comparações de várias colunas podem ser
emparelhadas ou não-emparelhadas.� Uma subconsulta de várias colunas também pode ser
usada na cláusula FROM de uma instrução SELECT.� As subconsultas escalares foram aperfeiçoadas
no Oracle9i.
![Page 521: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/521.jpg)
18-31 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
� As subconsultas correlacionadas são úteis sempre que uma subconsulta precisar retornar um resultado diferente para cada linha candidata.
� O operador EXISTS é um operador booleano que testa a presença de um valor.
� É possível usar subconsultas correlacionadas com instruções SELECT, UPDATE e DELETE.
� Você pode usar a cláusula WITH para usar o mesmo bloco de consultas em uma instrução SELECT quando ele ocorre mais de uma vez.
![Page 522: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/522.jpg)
18-32 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 18
Este exercício abrange os seguintes tópicos:� Criando subconsultas de várias colunas� Criando subconsultas correlacionadas� Usando o operador EXISTS� Usando subconsultas escalares� Usando a cláusula WITH
![Page 523: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/523.jpg)
19Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Recuperação Hierárquica
![Page 524: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/524.jpg)
19-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Interpretar o conceito de uma consulta hierárquica� Criar um relatório estruturado em árvore� Formatar dados hierárquicos� Excluir ramificações da estrutura em árvore
![Page 525: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/525.jpg)
19-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Dados de Amostra da Tabela EMPLOYEES
![Page 526: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/526.jpg)
19-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Estrutura em Árvore Natural
EMPLOYEE_ID = 100 (Pai)
MANAGER_ID = 100 (Filho)
De HannDe Hann
KingKing
HunoldHunoldWhalenWhalen
KochharKochhar
HigginsHiggins
MourgosMourgos ZlotkeyZlotkey
RajsRajs DaviesDavies MatosMatos
GietzGietzErnstErnst LorentzLorentz
HartsteinHartstein
Fay Fay
AbelAbel TaylorTaylor GrantGrant
VargasVargas
![Page 527: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/527.jpg)
19-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consultas Hierárquicas
WHERE condição:WHEREWHERE condicondiççãoão::expr operador_de_comparação expr
SELECT [LEVEL], coluna, expr...FROM tabela[WHERE condição(ões)][START WITH condição(ões)][CONNECT BY PRIOR condição(ões)] ;
![Page 528: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/528.jpg)
19-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Percorrendo a Árvore
Ponto Inicial
� Especificar a condição que deve ser atendida� Aceitar qualquer condição válida
Usando a tabela EMPLOYEES, comece com ofuncionário cujo sobrenome é Kochhar.
...START WITH last_name = 'Kochhar'
START WITH coluna1 = valor
![Page 529: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/529.jpg)
19-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Percorrendo a Árvore
Direção
De cima De cima para baixopara baixo
Coluna1 = Chave mColuna1 = Chave mãeãeColuna2 = Chave filhaColuna2 = Chave filha
De baixo De baixo para cimapara cima
Coluna1 = Chave filhaColuna1 = Chave filhaColuna2 = Chave mColuna2 = Chave mãeãe
Percorra a árvore de cima para baixo usando a tabela EMPLOYEES.Percorra a Percorra a árvore de cima para baixo usando a árvore de cima para baixo usando a tabela tabela EMPLOYEESEMPLOYEES..
CONNECT BY PRIOR coluna1 = coluna2
... CONNECT BY PRIOR employee_id = manager_id
![Page 530: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/530.jpg)
19-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Percorrendo a Árvore: de Baixo para Cima
SELECT employee_id, last_name, job_id, manager_idFROM employeesSTART WITH employee_id = 101CONNECT BY PRIOR manager_id = employee_id ;
![Page 531: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/531.jpg)
19-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Percorrendo a Árvore: de Cima para Baixo
SELECT last_name||' reports to '|| PRIOR last_name "Walk Top Down"FROM employees
START WITH last_name='King' CONNECT BY PRIOR employee_id = manager_id ;
�
![Page 532: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/532.jpg)
19-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Classificando Linhas coma Pseudocoluna LEVEL
De HannDe Hann
KingKing
HunoldHunoldWhalenWhalen
KochharKochhar
HigginsHiggins
MourgosMourgos ZlotkeyZlotkey
RajsRajs DaviesDavies MatosMatos
GietzGietzErnstErnst LorentzLorentz
HartsteinHartstein
FayFay
AbelAbel TaylorTaylor GrantGrant
VargasVargas
Nível 1raiz/mãe
Nível 2mãe/filha
Nível 3mãe/filha
/folha
Nível 4folha
![Page 533: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/533.jpg)
19-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Formatando Relatórios Hierárquicos Usando LEVEL e LPAD
Criar um relatório que exiba os níveis de gerenciamentoda empresa, começando com o nível mais alto erecuando cada um dos níveis a seguir.
COLUMN org_chart FORMAT A12
SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')
AS org_chartFROM employeesSTART WITH last_name='King' CONNECT BY PRIOR employee_id=manager_id
![Page 534: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/534.jpg)
19-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Compactando Ramificações
Usar a clUsar a cláusula áusula WHEREWHEREpara eliminar um npara eliminar um nó.ó.
Usar a clUsar a cláusula áusula CONNECT BYCONNECT BYpara eliminar uma ramificapara eliminar uma ramificaçção.ão.
WHERE last_name != 'Higgins'WHERE last_name != 'Higgins' CONNECT BY PRIOR CONNECT BY PRIOR employee_id = manager_id employee_id = manager_id AND last_name != 'Higgins'AND last_name != 'Higgins'KochharKochhar
HigginsHiggins
GietzGietz
WhalenWhalen
KochharKochhar
HigginsHigginsWhalenWhalen
GietzGietz
![Page 535: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/535.jpg)
19-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Usar as consultas hierárquicas para exibir um
relacionamento hierárquico entre as linhas deuma tabela.
� Especificar a direção e o ponto inicial da consulta. � Compactar nós ou ramificações.
![Page 536: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/536.jpg)
19-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 19
Este exercício abrange os seguintes tópicos:� Distinguindo consultas hierárquicas de consultas
não hierárquicas� Percorrendo uma árvore� Produzindo um relatório recuado com a
pseudocoluna LEVEL� Compactando ramificações da estrutura da árvore� Classificando a saída
![Page 537: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/537.jpg)
20Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Extensões do Oracle9i paraInstruções DML e DDL
![Page 538: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/538.jpg)
20-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir esta lição, você poderá fazer o seguinte:� Descrever os recursos de inserções multitabelas� Usar os seguintes tipos de inserções multitabelas:
– INSERT incondicional– INSERT de criação de pivôs– ALL INSERT condicional– FIRST INSERT condicional
� Criar e usar tabelas externas� Nomear o índice durante a criação de uma restrição
de chave primária
![Page 539: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/539.jpg)
20-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revisão da Instrução INSERT
� Adicione novas linhas a uma tabela usando a instrução INSERT.
� Somente uma linha é inserida por vez com esta sintaxe.
INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);
INSERT INTO tabela [(coluna [, coluna...])]VALUES (valor [, valor...]);
INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);1 row created.
![Page 540: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/540.jpg)
20-4 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Revisão da Instrução UPDATE
� Modifique linhas existentes com a instrução UPDATE.
� Atualize mais de uma linha por vez, se necessário.� Uma ou mais linhas específicas serão modificadas
se você especificar a cláusula WHERE.
UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];
UPDATE tabelaSET coluna = valor [, coluna = valor, ...][WHERE condição];
UPDATE employeesSET department_id = 70WHERE employee_id = 142;1 row updated.1 row updated.
![Page 541: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/541.jpg)
20-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral das Instruções INSERT Multitabelas
� É possível usar a instrução INSERT...SELECT para inserir linhas em várias tabelas como parte de uma única instrução DML.
� É possível usar instruções INSERT multitabelas em sistemas de data warehouse para transferir dados de uma ou mais origens operacionais para um conjunto de tabelas de destino.
� Elas fornecem uma melhoria significativa de desempenho em:� Uma única instrução DML versus várias instruções
INSERT...SELECT
� Uma única instrução DML versus um procedimento para executar várias inserções com a sintaxe IF...THEN
![Page 542: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/542.jpg)
20-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tipos de Instruções INSERT Multitabelas
O Oracle9i apresenta os seguintes tipos de instruções INSERT multitabelas:
INSERT incondicionalALL INSERT condicionalFIRST INSERT condicionalINSERT de criação de pivôs
![Page 543: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/543.jpg)
20-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instruções INSERT Multitabelas
INSERT [ALL] [conditional_insert_clause][insert_into_clause values_clause] (subconsulta)
[ALL] [FIRST][WHEN condição THEN] [insert_into_clause values_clause][ELSE] [insert_into_clause values_clause]
conditional_insert_clause
Sintaxe
![Page 544: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/544.jpg)
20-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT ALL Incondicional
� Selecione os valores de EMPLOYEE_ID, HIRE_DATE, SALARY e MANAGER_ID da tabela EMPLOYEES para os funcionários cujo EMPLOYEE_ID é maior que 200.
� Insira esses valores nas tabelas SAL_HISTORY e MGR_HISTORY usando um INSERT multitabelas.
INSERT ALLINTO sal_history VALUES(EMPID,HIREDATE,SAL)INTO mgr_history VALUES(EMPID,MGR,SAL)SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR FROM employeesWHERE employee_id > 200;
8 rows created.8 rows created.
![Page 545: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/545.jpg)
20-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT ALL Condicional
� Selecione os valores de EMPLOYEE_ID, HIRE_DATE, SALARY e MANAGER_ID da tabela EMPLOYEES para os funcionários com EMPLOYEE_ID maior que 200.
� Se SALARY for superior a US$ 10.000, insira esses valores na tabela SAL_HISTORY usando uma instrução INSERT multitabelas condicional.
� Se MANAGER_ID for maior que 200, insira esses valores na tabela MGR_HISTORY usando uma instrução INSERTmultitabelas condicional.
![Page 546: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/546.jpg)
20-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT ALL Condicional
INSERT ALL
WHEN SAL > 10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE, salary SAL, manager_id MGR
FROM employeesWHERE employee_id > 200;
4 rows created.4 rows created.
![Page 547: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/547.jpg)
20-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
FIRST INSERT Condicional
� Selecione DEPARTMENT_ID, SUM(SALARY) e MAX(HIRE_DATE) na tabela EMPLOYEES.
� Se SUM(SALARY) for superior a US$ 25.000, insira esses valores em SPECIAL_SAL, usando uma instrução INSERT multitabelas FIRST condicional.
� Se a primeira cláusula WHEN for avaliada como verdadeira, as cláusulas WHEN subseqüentes para essa linha serão ignoradas.
� Insira as linhas que não atendem à primeira condição WHEN na tabela HIREDATE_HISTORY_00, HIREDATE_HISTORY_99 ou HIREDATE_HISTORY, com base no valor da coluna HIRE_DATE usando uma instrução INSERT multitabelas condicional.
![Page 548: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/548.jpg)
20-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
FIRST INSERT Condicional
INSERT FIRSTWHEN SAL > 25000 THENINTO special_sal VALUES(DEPTID, SAL)
WHEN HIREDATE like ('%00%') THENINTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like ('%99%') THENINTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
ELSEINTO hiredate_history VALUES(DEPTID, HIREDATE)SELECT department_id DEPTID, SUM(salary) SAL,
MAX(hire_date) HIREDATEFROM employeesGROUP BY department_id;
8 rows created.8 rows created.
![Page 549: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/549.jpg)
20-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT de Criação de Pivôs
� Suponha que você receba um conjunto de registros de vendas de uma tabela de banco de dados não relacional, SALES_SOURCE_DATA, no seguinte formato:EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE, SALES_WED, SALES_THUR, SALES_FRI
� Você poderia armazenar esses registros na tabela SALES_INFO em um formato relacional mais típico:EMPLOYEE_ID, WEEK, SALES
� Usando um INSERT de criação de pivôs, converta o conjunto de registros de vendas da tabela de banco de dados não relacional no formato relacional.
![Page 550: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/550.jpg)
20-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
INSERT de Criação de Pivôs
INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;5 rows created.5 rows created.
![Page 551: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/551.jpg)
20-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Tabelas Externas
� As tabelas externas são tabelas somente para leitura nas quais os dados são armazenados fora do banco de dados em arquivos simples.
� Os metadados para uma tabela externa são criados com uma instrução CREATE TABLE.
� Com a ajuda de tabelas externas, os dados Oracle podem ser armazenados ou descarregados como arquivos simples.
� Você pode consultar os dados usando SQL, mas não pode usar DML nem criar índices.
![Page 552: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/552.jpg)
20-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando uma Tabela Externa
� Use external_table_clause com a sintaxe CREATE TABLE para criar uma tabela externa.
� Especifique ORGANIZATION como EXTERNAL para indicar que a tabela está localizada fora do banco de dados.
� external_table_clause consiste nos drivers de acesso TYPE, external_data_properties e REJECT LIMIT.
� external_data_properties consiste no seguinte:– DEFAULT DIRECTORY
– ACCESS PARAMETERS
– LOCATION
![Page 553: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/553.jpg)
20-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Criação deuma Tabela Externa
Crie um objeto DIRECTORY que corresponda ao diretório no sistema de arquivos no qual a origem de dados externa reside.
CREATE DIRECTORY emp_dir AS '/flat_files' ;
![Page 554: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/554.jpg)
20-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exemplo de Criação de uma Tabela Externa
CREATE TABLE oldemp ( empno NUMBER, empname CHAR(20), birthdate DATE)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY emp_dirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE 'bad_emp' LOGFILE 'log_emp' FIELDS TERMINATED BY ',' (empno CHAR,empname CHAR,birthdate CHAR date_format date mask "dd-mon-yyyy"))LOCATION ('emp1.txt'))PARALLEL 5REJECT LIMIT 200;
Table created.Table created.
![Page 555: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/555.jpg)
20-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Consultando Tabelas Externas
SELECT * FROM oldemp
emp1.txt
![Page 556: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/556.jpg)
20-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
CREATE INDEX com a Instrução CREATE TABLE
CREATE TABLE NEW_EMP(employee_id NUMBER(6)
PRIMARY KEY USING INDEX
(CREATE INDEX emp_id_idx ON
NEW_EMP(employee_id)),first_name VARCHAR2(20),last_name VARCHAR2(25));Table created.Table created.
SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXESWHERE TABLE_NAME = 'NEW_EMP';
![Page 557: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/557.jpg)
20-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Nesta lição, você aprendeu a:� Usar a instrução INSERT…SELECT para inserir
linhas em várias tabelas como parte de uma única instrução DML
� Criar tabelas externas� Nomear índices com a instrução CREATE INDEX e a
instrução CREATE TABLE
![Page 558: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/558.jpg)
20-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício 20
Este exercício abrange os seguintes tópicos:� Criando instruções INSERT incondicionais� Criando instruções ALL INSERT incondicionais� Instruções INSERT de criação de pivôs� Criando índices junto com o comando CREATE
TABLE
![Page 559: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/559.jpg)
CCopyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o SQL*PlusUsando o SQL*Plus
![Page 560: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/560.jpg)
C-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ObjetivosObjetivos
Após concluir este apêndice, você poderá fazero seguinte:� Efetuar logon no SQL*Plus� Editar comandos SQL� Formatar saídas usando comandos do SQL*Plus� Interagir com arquivos de script
Após concluir este apêndice, você poderá fazero seguinte:� Efetuar logon no SQL*Plus� Editar comandos SQL� Formatar saídas usando comandos do SQL*Plus� Interagir com arquivos de script
![Page 561: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/561.jpg)
C-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Interação entre SQL e SQL*PlusInteração entre SQL e SQL*Plus
SQL*PlusSQL*Plus
BufferBuffer
ServidorInstruções SQL
Resultados da consulta
ScriptsSQL
![Page 562: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/562.jpg)
C-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instruções SQL VersusComandos do SQL*PlusInstruções SQL VersusComandos do SQL*Plus
InstruInstruççõesõesSQLSQL
SQLSQL�� Uma linguagemUma linguagem�� PadrPadrãoão ANSIANSI�� AsAs palavraspalavras--chavechave nnão ão
podempodem serser abreviadasabreviadas�� AsAs instruinstruçções ões
manipulam definimanipulam definiççõesõesde dados ede dados e tabelatabela nonobancobanco de dadosde dados
SQL*PlusSQL*Plus�� UmUm ambienteambiente�� Patenteado pelaPatenteado pela OracleOracle�� AsAs palavraspalavras--chave podemchave podem
serser abreviadasabreviadas�� OsOs comandoscomandos nnão ão
permitempermitem aa manipulamanipulaççãoãodosdos valoresvalores nono bancobancodede dadosdados
BufferBufferSQLSQL
ComandosComandos dodoSQL*PlusSQL*Plus
Buffer doBuffer doSQL*PlusSQL*Plus
![Page 563: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/563.jpg)
C-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
� Efetuar logon no SQL*Plus.� Descrever a estrutura de tabela.� Editar a instrução SQL.� Executar o código SQL a partir do SQL*Plus.� Salvar as instruções SQL em arquivos e anexar
as instruções SQL a arquivos.� Executar arquivos salvos.� Carregar comandos do arquivo para o buffer
e editá-los.
� Efetuar logon no SQL*Plus.� Descrever a estrutura de tabela.� Editar a instrução SQL.� Executar o código SQL a partir do SQL*Plus.� Salvar as instruções SQL em arquivos e anexar
as instruções SQL a arquivos.� Executar arquivos salvos.� Carregar comandos do arquivo para o buffer
e editá-los.
Visão Geral do SQL*PlusVisão Geral do SQL*Plus
![Page 564: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/564.jpg)
C-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Efetuando Logon no SQL*PlusEfetuando Logon no SQL*Plus
�� EmEm umum ambienteambiente Windows:Windows:
�� Em uma linhaEm uma linha dede comandoscomandos::
sqlplussqlplus [[nomenome_do__do_usuusuárioário[/[/senha senha
[@[@bancobanco_de_dados_de_dados]]]]]]
![Page 565: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/565.jpg)
C-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Exibindo a Estrutura de TabelaExibindo a Estrutura de Tabela
Use o comando DESCRIBE do SQL*Plus para exibir aestrutura de uma tabela.Use o comando DESCRIBE do SQL*Plus para exibir aestrutura de uma tabela.
DESC[RIBE] nome_da_tabela
![Page 566: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/566.jpg)
C-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Name Null? Type----------------------- -------- ------------DEPARTMENT_ID NOT NULL NUMBER(4)DEPARTMENT_NAME NOT NULL VARCHAR2(30)MANAGER_ID NUMBER(6)LOCATION_ID NUMBER(4)
Exibindo a Estrutura de TabelaExibindo a Estrutura de Tabela
SQL> DESCRIBE departments
![Page 567: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/567.jpg)
C-11 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comandos de Edição do SQL*PlusComandos de Edição do SQL*Plus
� A[PPEND] texto
� C[HANGE] / antigo / novo
� C[HANGE] / texto /
� CL[EAR] BUFF[ER]
� DEL
� DEL n
� DEL m n
� A[PPEND] texto
� C[HANGE] / antigo / novo
� C[HANGE] / texto /
� CL[EAR] BUFF[ER]
� DEL
� DEL n
� DEL m n
![Page 568: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/568.jpg)
C-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comandos de Edição do SQL*PlusComandos de Edição do SQL*Plus
� I[NPUT]
� I[NPUT] texto
� L[IST]
� L[IST] n
� L[IST] m n
� R[UN]
� n
� n texto
� 0 texto
� I[NPUT]
� I[NPUT] texto
� L[IST]
� L[IST] n
� L[IST] m n
� R[UN]
� n
� n texto
� 0 texto
![Page 569: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/569.jpg)
C-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
1 SELECT last_name2* FROM employees
SQL> LIST
1* SELECT last_name
SQL> A , job_id
1* SELECT last_name, job_id
1 SELECT last_name, job_id2* FROM employees
Usando LIST, n e APPENDUsando LIST, n e APPEND
SQL> 1
SQL> L
![Page 570: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/570.jpg)
C-14 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
1* SELECT * from employees
SQL> L
1* SELECT * from departments
SQL> c/employees/departments
1* SELECT * from departments
Usando o Comando CHANGEUsando o Comando CHANGE
SQL> L
![Page 571: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/571.jpg)
C-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Comandos de Arquivo do SQL*PlusComandos de Arquivo do SQL*Plus
� SAVE nome_de_arquivo
� GET nome_de_arquivo
� START nome_de_arquivo
� @ nome_de_arquivo
� EDIT nome_de_arquivo
� SPOOL nome_de_arquivo
� EXIT
� SAVE nome_de_arquivo
� GET nome_de_arquivo
� START nome_de_arquivo
� @ nome_de_arquivo
� EDIT nome_de_arquivo
� SPOOL nome_de_arquivo
� EXIT
![Page 572: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/572.jpg)
C-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Created file my_query
SQL> START my_query
SQL> L1 SELECT last_name, manager_id, department_id2* FROM employees
SQL> SAVE my_query
Usando os Comandos SAVE e STARTUsando os Comandos SAVE e START
LAST_NAME MANAGER_ID DEPARTMENT_ID------------------------- ---------- -------------King 90Kochhar 100 90...20 rows selected.
![Page 573: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/573.jpg)
C-18 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
ResumoResumo
Use o SQL*Plus como um ambiente para:� Executar instruções SQL� Editar instruções SQL� Formatar a saída� Interagir com arquivos de script
Use o SQL*Plus como um ambiente para:� Executar instruções SQL� Editar instruções SQL� Formatar a saída� Interagir com arquivos de script
![Page 574: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/574.jpg)
DCopyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando Scripts Avançados
![Page 575: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/575.jpg)
D-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir este apêndice, você poderá fazero seguinte:� Descrever os tipos de problemas solucionados
usando o SQL para gerar SQL� Criar um script que gere um script de instruções
DROP TABLE
� Criar um script que gere um script de instruções INSERT INTO
![Page 576: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/576.jpg)
D-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Usando o SQL para Gerar SQL
DicionDicionárioáriode de dadosdados
Script SQLScript SQL
SQL
� O SQL pode ser usado para gerar scripts em SQL� O dicionário de dados
� É um conjunto de tabelas e views que contém informações sobre o banco de dados
� É criado e mantido pelo servidor Oracle
� O SQL pode ser usado para gerar scripts em SQL� O dicionário de dados
� É um conjunto de tabelas e views que contém informações sobre o banco de dados
� É criado e mantido pelo servidor Oracle
![Page 577: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/577.jpg)
D-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Criando um Script Básico
SELECT 'CREATE TABLE ' || table_name || '_test '|| 'AS SELECT * FROM ' || table_name ||' WHERE 1=2;' AS "Create Table Script"
FROM user_tables;
![Page 578: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/578.jpg)
D-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SPOOL dropem.sql
SPOOL OFF
Controlando o Ambiente
Defina variDefina variáveisáveis dodosistema como valores sistema como valores apropriadosapropriados..
Redefina variRedefina variáveisáveisdodo sistema parasistema para o o valor default.valor default.
INSTRUÇÃO SQL
SET ECHO OFFSET FEEDBACK OFFSET PAGESIZE 0
SET FEEDBACK ONSET PAGESIZE 24SET ECHO ON
![Page 579: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/579.jpg)
D-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Quadro Geral
SET ECHO OFFSET FEEDBACK OFFSET PAGESIZE 0
SELECT 'DROP TABLE ' || object_name || ';'FROM user_objectsWHERE object_type = 'TABLE'/
SET FEEDBACK ONSET PAGESIZE 24SET ECHO ON
![Page 580: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/580.jpg)
D-8 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Efetuando um Dump do Conteúdode uma Tabela para um Arquivo
SET HEADING OFF ECHO OFF FEEDBACK OFFSET PAGESIZE 0
SELECT'INSERT INTO departments_test VALUES(' || department_id || ', ''' || department_name ||''', ''' || location_id || ''');'AS "Insert Statements Script"
FROM departments/
SET PAGESIZE 24SET HEADING ON ECHO ON FEEDBACK ON
![Page 581: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/581.jpg)
D-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Efetuando um Dump do Conteúdode uma Tabela para um Arquivo
Origem
'''X'''
''''
''''||department_name||''''
''', '''
''');'
Resultado
'X'
'
'Administration'
','
');
![Page 582: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/582.jpg)
D-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Gerando um Predicado Dinâmico
COLUMN my_col NEW_VALUE dyn_where_clause
SELECT DECODE('&&deptno', null,DECODE ('&&hiredate', null, ' ','WHERE hire_date=TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')'),DECODE ('&&hiredate', null,'WHERE department_id = ' || '&&deptno','WHERE department_id = ' || '&&deptno' ||' AND hire_date = TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')')) AS my_col FROM dual;
SELECT last_name FROM employees &dyn_where_clause;
![Page 583: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/583.jpg)
D-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Neste apêndice, você aprendeu o seguinte: � É possível criar um script SQL para gerar outro
script SQL� Os arquivos de script geralmente usam o
dicionário de dados� Você pode capturar a saída em um arquivo
![Page 584: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/584.jpg)
D-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Visão Geral do Exercício D
Este exercício abrange os seguintes tópicos:� Criar um script para descrever e selecionar os
dados das suas tabelas� Criar um script para revogar privilégios de usuários
![Page 585: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/585.jpg)
ECopyright © Oracle Corporation, 2001. Todos os direitos reservados.
Componentes Arquitetônicosdo Oracle
![Page 586: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/586.jpg)
E-2 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Objetivos
Após concluir este apêndice, você poderá fazero seguinte:� Descrever a arquitetura do Oracle Server e seus
principais componentes� Listar as estruturas envolvidas ao conectar um
usuário a uma instância Oracle� Listar os estágios no processamento de:
� Consultas� Instruções DML� Commits
![Page 587: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/587.jpg)
E-3 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Banco de Dados
Arquivosde
redo log
Arquivosde
controle
Arquivosde dados
Visão GeralVisão GeralProcesso
do usuário
Processodo servidor
PGA
Arquivosde log
redo log
Arquivo deparâmetros
Arquivode senhas
Instância
SGA
Buffer deredo log
Cache debuffer de
dados
Pool compartilhado
Cache dodic. de dados
Cache debiblioteca
PMONDBW0SMON LGWRCKPT Outros
![Page 588: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/588.jpg)
E-5 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Arquivos de Bancos de Dados OracleArquivos de Bancos de Dados Oracle
Banco de Dados
Arquivosde dados
Arquivosde log
redo log
Arquivo deparâmetros
Arquivode senhas
Arquivosde
redo log
Arquivosde
controle
![Page 589: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/589.jpg)
E-6 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Outras Estruturas Físicas ImportantesOutras Estruturas Físicas Importantes
Arquivo deparâmetros
Arquivode senhas Banco de Dados
Arquivosde log
redo log
![Page 590: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/590.jpg)
E-7 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Instância OracleInstância Oracle
ProcessosProcessos dedesegundo planosegundo plano
Uma instância Oracle:� É uma forma de acessar um banco de dados Oracle� Sempre abre apenas um banco de dados
Uma instância Oracle:� É uma forma de acessar um banco de dados Oracle� Sempre abre apenas um banco de dados
EstruturasEstruturasdede memmemóriaória
Instância
SGA
Buffer deredo log
Cache debuffer de
dados
Pool compartilhado
PMONDBW0SMON LGWRCKPT Outros
![Page 591: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/591.jpg)
E-9 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Processando uma Instrução SQLProcessando uma Instrução SQL
� Conecte-se a uma instância usando:� O processo do usuário� O processo do servidor
� Os componentes do Oracle Server que são usados dependem do tipo de instrução SQL:� As consultas retornam linhas� As instruções DML registram alterações� O commit garante a recuperação da transação
� Alguns componentes do Oracle Server não participam do processamento de instruções SQL
� Conecte-se a uma instância usando:� O processo do usuário� O processo do servidor
� Os componentes do Oracle Server que são usados dependem do tipo de instrução SQL:� As consultas retornam linhas� As instruções DML registram alterações� O commit garante a recuperação da transação
� Alguns componentes do Oracle Server não participam do processamento de instruções SQL
![Page 592: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/592.jpg)
E-10 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Conectando-se a uma InstânciaConectando-se a uma Instância
Usuário Servidor
ServidorUsuário
ClienteCliente
Usuário Servidor
Servidor Oracle
ServidorServidorApplication serverApplication server
BrowserBrowser
![Page 593: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/593.jpg)
E-12 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Processando uma ConsultaProcessando uma Consulta
� Análise:� Procurar instrução idêntica� Verificar sintaxe, nomes de objeto e privilégios� Bloquear objetos usados durante a análise� Criar e armazenar o plano de execução
� Execução: Identificar linhas selecionadas� Extração: Retornar linhas ao processo do usuário
� Análise:� Procurar instrução idêntica� Verificar sintaxe, nomes de objeto e privilégios� Bloquear objetos usados durante a análise� Criar e armazenar o plano de execução
� Execução: Identificar linhas selecionadas� Extração: Retornar linhas ao processo do usuário
![Page 594: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/594.jpg)
E-13 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
O Pool CompartilhadoO Pool Compartilhado
� O cache de biblioteca contém o texto da instruçãoSQL, o código analisado e o plano de execução
� O cache do dicionário de dados contém tabela,coluna e outras definições de objeto e privilégios
� O pool compartilhado é dimensionado por SHARED_POOL_SIZE
� O cache de biblioteca contém o texto da instruçãoSQL, o código analisado e o plano de execução
� O cache do dicionário de dados contém tabela,coluna e outras definições de objeto e privilégios
� O pool compartilhado é dimensionado por SHARED_POOL_SIZE
Cache dodicionáriode dados
Cache debiblioteca
Poolcompartilhado
![Page 595: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/595.jpg)
E-15 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Cache de Buffer do Banco de DadosCache de Buffer do Banco de Dados
� Armazena os blocos usados recentemente� Tamanho de um buffer baseado em DB_BLOCK_SIZE� Número de buffers definido por DB_BLOCK_BUFFERS
� Armazena os blocos usados recentemente� Tamanho de um buffer baseado em DB_BLOCK_SIZE� Número de buffers definido por DB_BLOCK_BUFFERS
Cache debuffer de dados
![Page 596: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/596.jpg)
E-16 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Área Global do Programa (PGA)Área Global do Programa (PGA)
� Não compartilhada� Gravável somente pelo processo do servidor� Contém:
� Área de classificação� Informações sobre a sessão� Estado do cursor� Espaço de pilha
� Não compartilhada� Gravável somente pelo processo do servidor� Contém:
� Área de classificação� Informações sobre a sessão� Estado do cursor� Espaço de pilha
Processo doservidor
PGA
![Page 597: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/597.jpg)
E-17 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
1
1
Processando uma Instrução DMLProcessando uma Instrução DML
2 34
UPDATE
employees ...
Processodo usuário
Processodo servidor
Banco de Dados
Arquivosde
redo log
Arquivosde
controle
Arquivosde dados
SGA
Buffer deredo log
Cache debuffer de
dados
Poolcompartilhado
![Page 598: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/598.jpg)
E-19 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Buffer de Redo LogBuffer de Redo Log
� Tem seu tamanho definido por LOG_BUFFER� Registra alterações efetuadas pela instância� É usado seqüencialmente� É um buffer circular
� Tem seu tamanho definido por LOG_BUFFER� Registra alterações efetuadas pela instância� É usado seqüencialmente� É um buffer circular
Buffer deredo log
![Page 599: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/599.jpg)
E-20 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Segmento de RollbackSegmento de Rollback
InstruInstruççãoão DMLDML
Imagem antigaImagem antiga
ImagemImagemnovanova
SegmentoSegmento de rollbackde rollbackTabelaTabela
![Page 600: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/600.jpg)
E-21 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Banco de Dados
Arquivosde
redo log
Arquivosde
controle
Arquivosde dados
SGA
Buffer deredo log
Cache debuffer de
dados
LGWR
Instância
Processamento de COMMITProcessamento de COMMIT
1
23
4
Processodo usuário
Processodo servidor
Poolcompartilhado
![Page 601: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/601.jpg)
E-23 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Banco de Dados
Arquivosde
redo log
Arquivosde
controle
Arquivosde dados
Log Writer (LGWR)Log Writer (LGWR)
O LGWR grava quando:� Há um COMMIT � Um-terço do buffer
de redo logestá cheio
� Há mais de 1 MB de redo
� Antes de gravaçõesDBW0
O LGWR grava quando:� Há um COMMIT � Um-terço do buffer
de redo logestá cheio
� Há mais de 1 MB de redo
� Antes de gravaçõesDBW0
SGA
Buffer deredo log
Cache debuffer de
dados
LGWR
Poolcompartilhado
![Page 602: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/602.jpg)
E-24 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Outros Processos de Instância
� Outros processos necessários:� Database Writer (DBW0)� Process Monitor (PMON)� System Monitor (SMON)� Checkpoint (CKPT)
� O processo de arquivamento (ARC0) geralmente é criado em um banco de dados de produção
![Page 603: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/603.jpg)
E-25 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Banco de Dados
Arquivosde
redo log
Arquivosde
controle
Arquivosde dados
Database Writer (DBW0)Database Writer (DBW0)
O DBW0 grava quando:� Há muitos buffers
sujos� Há alguns buffers
livres� Ocorre timeout� Ocorre checkpoint
O DBW0 grava quando:� Há muitos buffers
sujos� Há alguns buffers
livres� Ocorre timeout� Ocorre checkpoint
SGA
Buffer deredo log
Cache debuffer de
dados
DBW0
Poolcompartilhado
![Page 604: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/604.jpg)
E-26 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
SMON: System Monitor
� Recupera a instância automaticamente:� Submete a rollforward as alterações nos redo logs� Abre o banco de dados para acesso do usuário� Submete a rollback as transações não
submetidas a commit� Une o espaço livre� Desaloca segmentos temporários
![Page 605: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/605.jpg)
E-27 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
PMON: Process Monitor
Faz uma limpeza após falha dos processos daseguinte maneira:� Submete a transação a rollback� Libera bloqueios� Libera outros recursos
![Page 606: Oracle Sql PortuguêS](https://reader035.fdocument.pub/reader035/viewer/2022081717/54633564b4af9f5d1c8b4b37/html5/thumbnails/606.jpg)
E-28 Copyright © Oracle Corporation, 2001. Todos os direitos reservados.
Resumo
Neste apêndice, você aprendeu a:� Identificar arquivos de banco de dados: arquivos
de dados, arquivos de controle, redo logs on-line� Descrever estruturas de memória SGA: cache de
buffer do banco de dados, pool SQL compartilhadoe buffer de redo log
� Explicar os principais processos de segundo plano: DBW0, LGWR, CKPT, PMON, SMON e ARC0
� Listar as etapas de processamento SQL: análise,execução, extração