Escolar Documentos
Profissional Documentos
Cultura Documentos
D64258BP10
Edição 1.0
Outubro de 2011
D74863
Autores Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos
reservados.
Salome Clement
Isenção de Responsabilidade
Brian Pottle
Puja Singh Este documento contém informações de propriedade da Oracle Corporation e está
protegido pela legislação de direitos autorais e outras leis de propriedade intelectual,
Revisores e podendo ser copiado e impresso somente para uso individual em um curso de
treinamento Oracle. O documento não pode ser modificado nem alterado de forma
Colaboradores Técnicos alguma. Exceto em situações que constituam "uso justo" de acordo com a legislação
de direitos autorais, não será permitido utilizar, compartilhar, descarregar, carregar,
Anjulaponni Azhagulekshmi
copiar, imprimir, executar, reproduzir, publicar, licenciar, divulgar, transmitir nem
Clair Bennett distribuir este documento - total ou parcialmente - sem a expressa autorização da
Zarko Cesljas Oracle.
Yanti Chang
Gerlinde Frenzen As informações contidas neste documento estão sujeitas a alterações sem aviso
prévio. Se você encontrar algum problema no documento, envie à Oracle Corporation
Steve Friedberg ou à Oracle do Brasil Sistemas Ltda. uma descrição de tal problema por escrito.
Joel Goodman Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065 USA. A
Nancy Greenberg Oracle Corporation não garante que este documento esteja isento de erros.
Editor
Jobi Varghese
Conteúdo
I Introdução
Objetivos da Lição I-2
Agenda de Lições I-3
Objetivos do Curso I-4
Agenda de Lições I-5
Apêndices Usados no Curso I-7
iii
1 Recuperando dados por meio da instrução SQL SELECT
Objetivos 1-2
Agenda de Lições 1-3
Recursos das instruções SQL SELECT 1-4
Instrução SELECT básica 1-5
Selecionando todas as colunas 1-6
Selecionando colunas específicas 1-7
Criando instruções SQL 1-8
Padrões de cabeçalho de coluna 1-9
Agenda de Lições 1-10
iv
Usando operadores de comparação 2-9
Condições de intervalo usando o operador BETWEEN 2-10
Condição de associação usando o operador IN 2-11
Correspondência de padrões usando o operador LIKE 2-12
Combinando caracteres curinga 2-13
Usando as condições NULL 2-14
Definindo condições usando os operadores lógicos 2-15
Usando o operador AND 2-16
Usando o operador OR 2-17
Usando o operador NOT 2-18
Agenda de Lições 2-19
v
Agenda de Lições 3-15
Funções de números 3-16
Usando a função ROUND 3-17
Usando a função TRUNC 3-18
Usando a função MOD 3-19
Agenda de Lições 3-20
Trabalhando com datas 3-21
Formato de datas RR 3-22
Usando a função SYSDATE 3-24
Aritmética com datas 3-25
Usando operadores aritméticos com datas 3-26
vi
Usando a função NVL2 4-31
Usando a função NULLIF 4-32
Usando a função COALESCE 4-33
Agenda de Lições 4-36
Expressões condicionais 4-37
Expressão CASE 4-38
Usando a expressão CASE 4-39
Função DECODE 4-40
Usando a função DECODE 4-41
Questionário 4-43
Sumário 4-44
vii
6 Exibindo Dados de Várias Tabelas Usando Joins
Objetivos 6-2
Agenda de Lições 6-3
Obtendo Dados de Várias Tabelas 6-4
Tipos de Joins 6-5
Unindo tabelas com a sintaxe SQL:1999 6-6
Qualificando Nomes de Coluna Ambíguos 6-7
Agenda de Lições 6-8
Criando joins natural 6-9
Recuperando registros com joins natural 6-10
Criando joins com a cláusula USING 6-11
viii
7 Usando subconsultas para solucionar consultas
Objetivos 7-2
Agenda de Lições 7-3
Usando uma subconsulta para solucionar um problema 7-4
Sintaxe de subconsulta 7-5
Usando uma subconsulta 7-6
Diretrizes para usar subconsultas 7-7
Tipos de subconsultas 7-8
Agenda de Lições 7-9
Subconsultas de uma única linha 7-10
Executando as subconsultas de uma única linha 7-11
ix
Operador INTERSECT 8-19
Uso do operador INTERSECT 8-20
Agenda de Lições 8-21
Operador MINUS 8-22
Uso do operador MINUS 8-23
Agenda de Lições 8-24
Correspondência às instruções SELECT 8-25
Correspondência à instrução SELECT: Exemplo 8-26
Agenda de Lições 8-27
Uso da cláusula ORDER BY nas operações de conjunto 8-28
Questionário 8-29
9 Manipulando dados
Objetivos 9-2
Agenda de Lições 9-3
Data Manipulation Language 9-4
Adicionando uma nova linha a uma tabela 9-5
Sintaxe da instrução INSERT 9-6
Inserindo novas linhas 9-7
Inserindo linhas com valores nulos 9-8
Inserindo valores especiais 9-9
Inserindo valores de data e horário específicos 9-10
Criando um script 9-11
Copiando linhas de outra tabela 9-12
Agenda de Lições 9-13
Alterando dados em uma tabela 9-14
Sintaxe da instrução UPDATE 9-15
Atualizando linhas em uma tabela 9-16
Atualizando duas colunas com uma subconsulta 9-17
Atualizando linhas baseadas em outra tabela 9-18
Agenda de Lições 9-19
Removendo uma linha de uma tabela 9-20
Instrução DELETE 9-21
Excluindo linhas de uma tabela 9-22
Excluindo linhas baseadas em outra tabela 9-23
Instrução TRUNCATE 9-24
Agenda de Lições 9-25
Transações do banco de dados 9-26
x
Transações do banco de dados: início e fim 9-27
Vantagens das instruções COMMIT e ROLLBACK 9-28
Instruções explícitas do controle de transações 9-29
Efetuando rollback das alterações para um marcador 9-30
Processamento implícito de transações 9-31
Estado dos dados antes do COMMIT ou ROLLBACK 9-33
Estado dos dados depois do COMMIT 9-34
Efetuando commit de dados 9-35
Estado dos dados depois do ROLLBACK 9-36
Estado dos dados depois do ROLLBACK: Exemplo 9-37
Rollback no nível da instrução 9-38
xi
Restrição PRIMARY KEY 10-23
Restrição FOREIGN KEY 10-24
Restrição FOREIGN KEY: palavras-chave 10-26
Restrição CHECK 10-27
CREATE TABLE: Exemplo 10-28
Violando restrições 10-29
Agenda de Lições 10-31
Criando uma tabela usando uma subconsulta 10-32
Agenda de Lições 10-34
Instrução ALTER TABLE 10-35
Tabelas somente para leitura 10-36
xii
Modificando uma sequência 11-31
Diretrizes para modificação de uma sequência 11-32
Agenda de Lições 11-33
Índices 11-34
Como são criados os índices? 11-36
Criando um índice 11-37
Diretrizes de criação de índice 11-38
Removendo um índice 11-39
Agenda de Lições 11-40
Sinônimos 11-41
Criando um sinônimo para um objeto 11-42
xiii
Depurando Procedures e Funções C-25
Geração de Relatórios de Banco de Dados C-26
Criando um Relatório Definido pelo Usuário C-27
Mecanismos de Pesquisa e Ferramentas Externas C-28
Definindo Preferências C-29
Redefinindo o Layout do SQL Developer C-30
Sumário C-31
xiv
Publicando Java em PL/SQL E-16
Como Posso Obter Mais Informações sobre o JDeveloper 11g? E-17
Sumário E-18
Índice
xv
xvi
Oracle Internal & Oracle Academy Use Only
Apêndice A
Exercícios e Soluções
Alguns exercícios podem ser antecedidos pelas expressões “Se tiver tempo” ou “Se
quiser tomar parte em mais um desafio”. Faça esses exercícios apenas se tiver concluído
todos os outros exercícios no tempo proposto e deseja um desafio maior para suas
Observação
1) Todos os exercícios escritos usam o Oracle SQL Developer como ambiente de
desenvolvimento. Ainda que seja recomendável que você use o Oracle SQL
Developer, você também poderá usar o SQL*Plus disponível neste curso.
2) Talvez a sequência de linhas recuperada do banco de dados seja diferente dos
screenshots mostrados para as consultas.
Verdadeiro/Falso
Verdadeiro/Falso
Parte 2
Observe os seguintes pontos antes de começar os exercícios:
• Salve todos os arquivos do lab no seguinte local:
/home/oracle/labs/sql1/labs
• Digite suas instruções SQL em uma Planilha SQL. Para salvar um script no SQL
Developer, verifique se a planilha SQL está ativa e, no menu File, selecione Save
As para salvar a instrução SQL como um script
lab_<lessonno>_<stepno>.sql. Quando você estiver modificando um script
existente, assegure-se de usar a opção Save As para salvá-lo com um nome de
arquivo diferente.
• Para executar a consulta, clique no ícone Execute Statement da planilha SQL.
Alternativamente, você pode pressionar [F9]. Para instruções DML e DDL, use o
ícone Run Script ou pressione [F5].
• Após a execução da consulta, assegure-se de não inserir a próxima consulta na
mesma planilha. Abra uma nova planilha.
Parte 3
Se você tiver tempo, faça os seguintes exercícios:
8) O departamento de RH precisa de cabeçalhos de colunas mais descritivos para o
relatório sobre os funcionários. Copie a instrução do lab_01_05.sql para uma nova
planilha SQL. Nomeie os cabeçalhos de coluna Emp #, Employee, Job e Hire
Date, respectivamente. Execute a consulta novamente.
Verdadeiro/Falso.
Verdadeiro/Falso.
A tabela EMPLOYEES não contém uma coluna com o nome sal. O nome da
coluna é SALARY.
O apelido ANNUAL SALARY não pode conter espaços. O apelido deve ser
escrito da forma ANNUAL_SALARY ou estar dentro de aspas duplas.
Parte 3
Se você tiver tempo, faça os seguintes exercícios:
8) O departamento de RH precisa de cabeçalhos de colunas mais descritivos para o
relatório sobre os funcionários. Copie a instrução do lab_01_05.sql para uma nova
planilha SQL. Nomeie os cabeçalhos de coluna Emp #, Employee, Job e Hire
Date, respectivamente. Execute a consulta novamente.
SELECT employee_id "Emp #", last_name "Employee",
job_id "Job", hire_date "Hire Date"
FROM employees;
13) Mostre os sobrenomes de todos os funcionários que têm as letras “a” e “e” no
sobrenome.
2) Abra uma nova Planilha SQL. Crie um relatório que mostre o sobrenome e o número
de departamento do funcionário de número 176.
SELECT last_name, department_id
Digite 12000 quando for solicitado a informar um valor em uma caixa de diálogo.
Clique em OK.
4) Modifique sua consulta lab_03_02.sql para adicionar uma coluna que subtraia o
antigo salário do novo salário. Nomeie a coluna Increase. Salve o conteúdo do
arquivo como lab_03_04.sql. Execute a consulta revisada.
Crie novamente a consulta de forma que o usuário seja solicitado a inserir a letra que
o sobrenome começa. Por exemplo, se o usuário digitar "H" (em letra maiúscula)
Modifique a consulta para que o resultado não seja afetado pela diferenciação de
maiúsculas e minúsculas. A letra inserida deve ser colocada em maiúsculo antes de
ser processada pela consulta SELECT.
8) Crie uma consulta mostrando os primeiro oito caracteres dos sobrenomes dos
funcionários e indicando o valor dos seus respectivos salários com asteriscos. Cada
asterisco significa mil dólares. Classifique os dados na ordem descendente do salário.
A coluna deve receber o nome EMPLOYEES_AND_THEIR_SALARIES.
4) Modifique sua consulta lab_03_02.sql para adicionar uma coluna que subtraia o
antigo salário do novo salário. Nomeie a coluna Increase. Salve o conteúdo do
arquivo como lab_03_04.sql. Execute a consulta revisada.
SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary",
ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;
5) Crie uma consulta que mostre os sobrenomes (com a primeira letra em maiúscula e
todas as demais em minúscula) e o comprimento dos sobrenomes de todos os
funcionários que tenham nomes que começam com as letras “J”, “A” ou “M”.Dê um
nome apropriado a cada coluna. Classifique os resultados pelos sobrenomes dos
funcionários.
SELECT INITCAP(last_name) "Name",
LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE 'J%'
OR last_name LIKE 'M%'
OR last_name LIKE 'A%'
ORDER BY last_name;
Recrie a consulta para que o usuário seja solicitado a digitar a letra pela qual começa
o sobrenome. Por exemplo, se o usuário digitar H (em letra maiúscula) quando for
solicitado a digitar uma letra, o resultado deverá mostrar todos os funcionários que
têm sobrenomes que começam com a letra “H”.
Observação: como esta consulta depende da data em que foi executada, os valores da
coluna MONTHS_WORKED serão diferentes para você.
SELECT last_name, ROUND(MONTHS_BETWEEN(
SYSDATE, hire_date)) MONTHS_WORKED
FROM employees
ORDER BY months_worked;
5) Com a função DECODE, crie uma consulta que exiba o nível de todos os funcionários
com base no valor da coluna JOB_ID. Use estes dados:
Cargo Nível
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
None of the above 0
6) Crie uma consulta para exibir o número de pessoas com o mesmo cargo.
8) Encontre a diferença entre os salários mais altos e os mais baixos. Nomeie a coluna
como DIFFERENCE.
4) Crie um relatório para exibir o sobrenome e o número dos funcionários, bem como o
sobrenome e o número dos respectivos gerentes. O label das colunas deverá ser
Employee, Emp#, Manager e Mgr#, respectivamente. Salve sua instrução SQL como
lab_06_04.sql. Execute a consulta.
7) Crie um relatório que exiba uma lista de todos os funcionários cujo salário seja maior
que o salário de qualquer funcionário do departamento 60.
Se tiver tempo, faça o seguinte exercício:
3) Gere uma lista de cargos dos departamentos 10, 50 e 20, nessa ordem. Exiba o ID do
cargo e o ID do departamento usando os operadores de conjunto.
4) Crie um relatório listando os IDs dos funcionários e os IDs de cargo dos funcionários
que atualmente ocupam um cargo igual ao que ocupavam quando foram contratados
pela empresa (ou seja, mudaram de cargo mas agora voltaram para seus cargos
originais).
3) Gere uma lista de cargos dos departamentos 10, 50 e 20, nessa ordem. Mostre o ID de
cargo e o ID do departamento usando os operadores de conjunto.
SELECT distinct job_id, department_id
FROM employees
WHERE department_id = 10
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 50
UNION ALL
SELECT DISTINCT job_id, department_id
FROM employees
WHERE department_id = 20
4) Crie um relatório listando os IDs dos funcionários e os IDs de cargo dos funcionários
que atualmente ocupam um cargo igual ao que ocupavam quando foram contratados
pela empresa (ou seja, mudaram de cargo mas agora voltaram para seus cargos
originais).
SELECT employee_id,job_id
FROM employees
INTERSECT
SELECT employee_id,job_id
FROM job_history;
26) Confirme que a nova linha foi adicionada com o USERID correto.
3) Crie uma instrução INSERT para adicionar a primeira linha de dados à tabela
MY_EMPLOYEE a partir do exemplo de dados a seguir. Não liste as colunas na cláusula
INSERT.
7) Preencha a tabela com as duas linhas de dados de amostra e seguida, listadas na etapa
3, executando a instrução INSERT no script que você criou.
21) Descarte a operação DELETE mais recente sem descartar a operação INSERT anterior.
ROLLBACK TO step_17;
3) Crie a tabela EMP com base no seguinte gráfico de instâncias da tabela. Salve a
instrução em um script denominado lab_10_03.sql e execute a instrução no script
para criar a tabela. Confirme que a tabela foi criada.
Column Name ID LAST_NAME FIRST_NAME DEPT_ID
Key Type
Nulls/Unique
FK Table DEPT
FK Column ID
Data type NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7
4) O departamento 50 precisa acessar os dados dos seus funcionários. Crie uma view
denominada DEPT50 contendo os números dos funcionários, os sobrenomes dos
funcionários e os números dos departamentos para todos os funcionários no
departamento 50. Você foi solicitado a rotular as colunas da view EMPNO, EMPLOYEE
e DEPTNO. Para fins de segurança, não permita que um funcionário seja reatribuído a
outro departamento por meio da view.
5) Exiba a estrutura e o conteúdo da view DEPT50.
Parte 2
7) Você precisa de uma sequência que possa ser usada com a coluna PRIMARY KEY da
tabela DEPT. A sequência deve começar em 200 e ter um valor máximo de 1.000.
Incremente a sequência em 10. Ela deve se chamar DEPT_ID_SEQ.
8) Para testar sua sequência, escreva um script para inserir duas linhas na tabela DEPT.
Atribua o nome lab_11_08.sql ao script. Não se esqueça de usar a sequência
criada para a coluna ID. Inclua dois departamentos: Education e Administration.
Confirme suas inclusões. Execute os comandos no script.
9) Crie um índice não exclusivo na coluna NAME na tabela DEPT.
10) Crie um sinônimo para a tabela EMPLOYEES. Chame-a de EMP.
4) O departamento 50 precisa acessar os dados dos seus funcionários. Crie uma view
denominada DEPT50 contendo os números dos funcionários, os sobrenomes dos
funcionários e os números dos departamentos de todos os funcionários do
departamento 50. Você foi solicitado a rotular as colunas da view EMPNO, EMPLOYEE
e DEPTNO. Para fins de segurança, não permita que um funcionário seja reatribuído a
outro departamento por meio da view.
CREATE VIEW dept50 AS
SELECT employee_id empno, last_name employee,
department_id deptno
FROM employees
WHERE department_id = 50
WITH CHECK OPTION CONSTRAINT emp_dept_50;
SELECT *
FROM dept50;
6) Teste a sua view. Tente reatribuir Matos ao departamento 80.
UPDATE dept50
SET deptno = 80
WHERE employee = 'Matos';
Parte 2
7) Você precisa de uma sequência que possa usada com a coluna de chave primária da
tabela DEPT. A sequência deve começar em 200 e ter um valor máximo de 1.000.
Incremente a sequência em 10. Ela deve se chamar DEPT_ID_SEQ.
CREATE SEQUENCE dept_id_seq
START WITH 200
INCREMENT BY 10
8) Para testar sua sequência, escreva um script para inserir duas linhas na tabela DEPT.
Atribua o nome lab_11_08.sql ao script. Não se esqueça de usar a sequência
criada para a coluna ID. Inclua dois departamentos: Education e Administration.
Confirme suas inclusões. Execute os comandos no script.
INSERT INTO dept
VALUES (dept_id_seq.nextval, 'Education');
8) Calcule o número de funcionários com sobrenomes que terminam com a letra “n”.
Crie duas soluções possíveis.
Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instruções SQL SELECT básicas, comandos básicos do SQL
Developer, funções SQL, joins, funções de grupo de subconsultas.
12) Mostre todos os funcionários que foram contratados na primeira metade do mês
(antes do dia 16).
13) Crie um relatório que mostre as seguintes informações sobre todos os funcionários:
Sobrenome, salário e salário expresso em milhares de dólares.
17) Crie um relatório que mostre os departamentos que não contam com o trabalho de
representantes de vendas. Inclua o número do departamento, o nome do
departamento, o ID do gerente e seu respectivo local.
20) Mostre todos os funcionários que foram contratados no dia da semana em que houve
o maior número de contratações de funcionários.
21) Crie um aniversário com base na data de contratação dos funcionários. Organize os
5) Mostre os funcionários com sobrenomes que começam pelas letras “J,” “K,” “L,” ou
“M.”
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1,1) IN ('J', 'K', 'L', 'M');
Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instrução SQL SELECT básica, comandos básicos do SQL Developer,
funções SQL, joins e funções de grupo.
7) Crie um relatório com o nome do departamento, ID do local, nome, cargo e salário
dos funcionários que trabalham em um determinado local. Solicite que o usuário
8) Calcule o número de funcionários com sobrenomes que terminam com a letra “n”.
Crie duas soluções possíveis.
SELECT COUNT(*)
FROM employees
WHERE last_name LIKE '%n';
--or
SELECT COUNT(*)
FROM employees
WHERE SUBSTR(last_name, -1) = 'n';
9) Crie um relatório com o nome, local e número de funcionários de cada departamento.
Certifique-se de que o relatório também inclua departamentos sem funcionários.
SELECT d.department_id, d.department_name,
d.location_id, COUNT(e.employee_id)
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name, d.location_id;
Você poderá usar estes exercícios como atividades complementares após a discussão dos
seguintes tópicos: Instruções SQL SELECT básicas, comandos básicos do SQL
TÍTULO
loop #* id
RESERVATION * título
#* res date o assunto * descrição
de classificação o
disponível
uma
responsável cópia
loop
TITLE_COPY
MEMBRO #* id
#* id * status
* sobrenome
nome o o assunto de
endereço o responsável
cidade o loop em relação a
telefone o
* data de admissão LOCAÇÃO
criada #* data de reserva
loop data de dev real o
data de dev prev o
Length 10 60 400 4 20
2 RENTED 2
3 RENTED 3
b) Número do título na tabela TITLE: Comece por 92; não permita o armazenamento
em cache dos valores. Dê um nome à sequência TITLE_ID_SEQ.
CREATE SEQUENCE title_id_seq
START WITH 92
NOCACHE;
COMMIT
SET VERIFY ON
5) Crie uma view com o nome TITLE_AVAIL para mostrar os títulos dos filmes, a
disponibilidade de cada cópia e a data de retorno estimado, caso estejam alugados.
Consulte todas as linhas na view. Organize os resultados por título.
Observação:Os resultados podem variar.
CREATE VIEW title_avail AS
SELECT t.title, c.copy_id, c.status, r.exp_ret_date
FROM title t JOIN title_copy c
ON t.title_id = c.title_id
FULL OUTER JOIN rental r
ON c.copy_id = r.copy_id
AND c.title_id = r.title_id;
SELECT *
FROM title_avail
ORDER BY title, copy_id;
DESCRIBE title
HR DEPARTAMENTS LOCATION
department_id location_id
department_name street_address
manager_id postal_code
location_id cidade
state_province
country_id
JOB_HISTORY
employee_id
start_date EMPLOYEES
end_date employee_id
job_id first_name COUNTRY
department_id last_name country_id
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Neste apêndice, você será apresentado à ferramenta gráfica chamada SQL Developer. Você
aprenderá a usar o SQL Developer nas tarefas de desenvolvimento de seu banco de dados. Você
aprenderá a usar a Planilha SQL para executar instruções e scripts SQL.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
1 2
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
2 4 6 8
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Informe
instruções SQL.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
F9 F5
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Identifique um local,
2 informe um nome de
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Antes da
formatação
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Usando Snippets
Você poderá usar determinados fragmentos de códigos quando usar a Planilha SQL ou criar ou
editar uma função ou um procedure PL/SQL. O SQL Developer possui o recurso chamado
Snippets. Snippets são fragmentos de códigos como funções SQL, dicas do Optimizer e diversas
técnicas de programação de PL/SQL. Você pode arrastar snippets para a janela Editor.
Para exibir os Snippets, selecione View > Snippets.
A janela Snippets é exibida à direita. Você poderá usar a lista drop-down para selecionar um
grupo. O botão Snippets é exibido na margem da janela à direita para que você possa exibir a
janela Snippets se ela ficar oculta.
Inserindo
um snippet
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Atalhos para
ferramentas usadas
com frequência
1
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Definindo Preferências
Você pode personalizar muitos aspectos da interface e do ambiente do SQL Developer
modificando as preferências do SQL Developer de acordo com suas preferências e necessidades.
Para modificar as preferências do SQL Developer, selecione Tools e Preferences.
As preferências estão agrupadas nas seguintes categorias:
• Environment
• Accelerators (atalhos do teclado)
• Code Editors
• Database
• Debugger
• Documentation
• Extensions
• File Types
• Migration
• PL/SQL Compilers
• PL/SQL Debugger
Sumário
O SQL Developer é uma ferramenta gráfica gratuita que simplifica as tarefas de
desenvolvimento de banco de dados. Com o SQL Developer, você pode criar, editar e navegar
por objetos de banco de dados. Você pode usar a Planilha SQL para executar scripts e instruções
SQL. O SQL Developer permite que você crie e salve seu próprio conjunto especial de relatórios
para reutilização.
Objetivos
É possível criar instruções SELECT que possam ser usadas indefinidamente. Este apêndice
também aborda o uso de comandos do SQL*Plus para executar instruções SQL. Você aprenderá
a formatar a saída usando comandos do SQL*Plus, a editar comandos SQL e a salvar scripts no
SQL*Plus.
Instruções SQL
Servidor
SQL*Plus
Resultados da consulta
SQL
SQL
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
SQL e SQL*Plus
SQL é uma linguagem de comando usada para comunicação com o servidor Oracle por meio de
qualquer ferramenta ou aplicativo. O Oracle SQL contém diversas extensões. Quando você
informa uma instrução SQL, ela é armazenada em uma parte da memória chamada de buffer
SQL e permanece lá até que você especifique uma nova instrução SQL. O SQL*Plus é uma
ferramenta da Oracle que reconhece e envia instruções SQL para o Oracle9i Server para serem
executadas. Ele contém sua própria linguagem de comandos.
Recursos da linguagem SQL
• Ela pode ser usada por diferentes usuários, incluindo aqueles com pouca ou nenhuma
experiência em
programação
• É uma linguagem não procedural
• Reduz a quantidade de tempo necessária para a criação e a manutenção de sistemas
• É uma linguagem semelhante ao idioma inglês
Recursos do SQL*Plus
• Aceita a entrada ad hoc de instruções
• Aceita a entrada SQL de arquivos
• Oferece um editor de linha para a modificação de instruções SQL
• Controla as configurações do ambiente
• Formata os resultados da consulta em relatórios básicos
• Acessa bancos de dados locais e remotos
Oracle Database: Fundamentos de SQL I D - 3
Instruções SQL Versus Comandos do SQL*Plus
SQL SQL*Plus
• Uma linguagem • Um ambiente
• Padrão ANSI • Proprietário da Oracle
• Palavras-chave não • Palavras-chave podem
podem ser abreviadas. ser abreviadas.
• Instruções manipulam • Os comandos não
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
SQL SQL*Plus
É uma linguagem para a comunicação com o Reconhece instruções SQL e as envia ao servidor
servidor Oracle a fim de acessar os dados
É baseada no padrão ANSI (American É a interface proprietária da Oracle para a
National Standards Institute) SQL execução de instruções SQL
Manipula dados e definições de tabelas no Não permite a manipulação de valores no banco
banco de dados de dados
É incluída no buffer SQL em uma ou mais É incluído em uma linha de cada vez; não é
linhas armazenado no buffer SQL
Não tem um caractere de continuação Utiliza um traço (–) como caractere de
continuação se o comando ultrapassa uma linha
Não pode ser abreviada Pode ser abreviado
Utiliza um caractere de finalização para Não requer caracteres de finalização; executa os
executar os comandos imediatamente comandos imediatamente
Utiliza funções para aplicar formatação Utiliza comandos para formatar dados
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
SQL*Plus
O SQL*Plus é um ambiente no qual você pode:
• Executar instruções SQL para recuperar, modificar, adicionar e remover dados do banco de
dados
• Formatar, executar cálculos, armazenar e imprimir resultados de consultas no formato de
relatórios
• Criar arquivos de script para armazenar instruções SQL para uso repetido no futuro
Os comandos do SQL*Plus podem ser divididos nas seguintes categorias principais:
Categoria Objetivo
Environment Afeta o comportamento geral das instruções SQL na sessão
Format Formata os resultados da consulta
File manipulation Salva, carrega e executa arquivos de script
Execution Envia instruções SQL do buffer SQL para o servidor Oracle
Edit Modifica as instruções SQL no buffer
Interaction Cria e especifica variáveis para instruções SQL, imprime valores de
variáveis e imprime mensagens na tela
Miscellaneous Conecta-se ao banco de dados, manipula o ambiente SQL*Plus e exibe
definições de colunas
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
DESC[RIBE] tablename
DESCRIBE departments
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
• A[PPEND] text
• C[HANGE] / old / new
• C[HANGE] / text /
• CL[EAR] BUFF[ER]
• DEL
• DEL n
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
• I[NPUT]
• I[NPUT] text
• L[IST]
• L[IST] n
• L[IST] m n
• R[UN]
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Observação: Você pode informar apenas um comando do SQL*Plus para cada prompt SQL. Os
comandos do SQL*Plus não são armazenados no buffer. Para continuar um comando do
SQL*Plus na linha seguinte, finalize a primeira linha com um hífen (-).
LIST
1 SELECT last_name
2* FROM employees
1
1* SELECT last_name
LIST
1 SELECT last_name, job_id
2* FROM employees
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
LIST
1* SELECT * from employees
c/employees/departments
LIST
1* SELECT * from departments
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
LIST
1 SELECT last_name, manager_id, department_id
2* FROM employees
SAVE my_query
Created file my_query
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Comando SERVEROUTPUT
A maioria dos programas PL/SQL executa entrada e saída por meio de instruções SQL, para
armazenar dados em tabelas de banco de dados ou consultar essas tabelas. Toda a entrada/saída
PL/SQL restante é feita por meio de APIs que interagem com outros programas. Por exemplo, o
pacote DBMS_OUTPUT possui procedures como PUT_LINE. Para ver o resultado fora do
código PL/SQL, é necessário outro programa, como o SQL*Plus, para ler e exibir os dados
passados para DBMS_OUTPUT.
O SQL*Plus não exibirá os dados de DBMS_OUTPUT a não ser que você primeiro envie o
comando SET SERVEROUTPUT ON do SQL*Plus conforme a seguir:
SET SERVEROUTPUT ON
Observação
• SIZE define o número de bytes da saída, que pode ser armazenado em buffer no servidor
do Oracle Database. O default é UNLIMITED. n não pode ser menor que 2000 ou mais
que 1.000.000.
• Para obter informações adicionais sobre SERVEROUTPUT, consulte o Oracle Database
PL/SQL User's Guide and Reference 11g.
Opção Descrição
file_name[.ext] Envia a saída para o nome de arquivo especificado
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
SET AUTOTRACE ON
-- The AUTOTRACE report includes both the optimizer
-- execution path and the SQL statement execution
-- statistics
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Sumário
O SQL*Plus é um ambiente de execução que pode ser usado para enviar comandos SQL para o
servidor de banco de dados e para editar e salvar comandos SQL. Você pode executar comandos
no prompt do SQL ou em um arquivo de script.
Objetivos
Neste apêndice, você será apresentado ao JDeveloper. Você aprenderá a usar o JDeveloper nas
tarefas de desenvolvimento de seu banco de dados.
Oracle JDeveloper
O Oracle JDeveloper é um IDE (Integrated Development Environment) para o desenvolvimento
e a disponibilização de aplicações Java e serviços Web. Ele suporta todos os estágios do SDLC
(Software Development Life Cycle), desde a modelagem até a implantação. Também dispõe dos
recursos que permitem usar os padrões mais recentes do setor para Java, XML e SQL no
desenvolvimento de aplicações.
O Oracle JDeveloper 11g introduz uma nova abordagem para o desenvolvimento em J2EE ao
oferecer recursos que permitem desenvolvimento visual e declarativo. Essa abordagem
inovadora torna o desenvolvimento em J2EE simples e eficiente.
Database Navigator
Usando o Oracle JDeveloper, é possível armazenar em um objeto denominado “connection”
(conexão) as informações necessárias para se conectar a um banco de dados. Uma conexão é
armazenada como parte das definições do IDE e pode ser exportada e importada, a fim de
facilitar o compartilhamento entre grupos de usuários. As conexões são usadas para várias
finalidades, desde a navegação no banco de dados e a criação de aplicações até a implantação.
4 Clique em OK.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Criando Conexão
Uma conexão é um objeto que especifica as informações necessárias para se conectar com um
determinado banco de dados como um usuário específico desse banco de dados. Você pode criar
e testar conexões com vários bancos de dados e vários esquemas.
Para criar uma conexão de banco de dados, execute as seguintes etapas:
1. Clique no ícone New Connection no Database Navigator.
2. Na janela Create Database Connection, informe o nome da conexão. Informe o nome de
usuário e a senha do esquema ao qual deseja se conectar. Informe o SID do Banco de
Dados com o qual deseja se conectar.
3. Clique em Test para garantir que a conexão foi definida corretamente.
4. Clique em OK.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
3
Esqueleto da função
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Compilando
Após editar a definição de esqueleto, você precisa compilar a unidade de programa. Clique com
o botão direito do mouse no objeto PL/SQL a ser compilado no Connection Navigator e
selecione Compile. Como alternativa, também é possível pressionar [Ctrl] + [Shift] + [F9] para
fazer a compilação.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Janela Structure
A janela Structure permite uma visão estrutural dos dados contidos no documento selecionado
na janela ativa, que pode ser um dos elementos que formam a estrutura: navegadores, editores,
modos de exibição e o Property Inspector.
Clique na janela View > Structure para exibir a janela Structure.
Na janela Structure, é possível exibir os dados do documento de várias maneiras. As estruturas
disponíveis para exibição se baseiam no tipo do documento. No caso de um arquivo Java, é
possível exibir a estrutura de código, a estrutura da interface do usuário ou os dados de modelo
da interface do usuário. No caso de um arquivo XML, é possível exibir a estrutura XML, a
estrutura do projeto ou os dados de modelo da interface do usuário.
A janela Structure é dinâmica, controlando sempre a seleção atual da janela ativa (a menos que
você congele o conteúdo da janela em uma view específica), como acontece com o editor ativo
no momento. Quando a seleção atual é um nó no navegador, o editor default é utilizado. Se
quiser alterar a view da estrutura para a seleção atual, clique em outra tab de estrutura.
Janela Editor
Quando você clica duas vezes no nome de uma unidade de programa, ela é aberta na janela
Editor. É possível exibir todos os arquivos de projeto em apenas uma janela do editor, abrir
várias views do mesmo arquivo ou abrir várias views de arquivos diferentes.
Na parte superior da janela do editor, encontram-se as tabs de documentos. Clicar em uma tab de
documento coloca esse arquivo em destaque, trazendo-o para o primeiro plano da janela do
editor atual.
Na parte inferior da janela do editor referente a um determinado arquivo, estão as tabs de editor.
A seleção de uma dessas tabs abre o arquivo no editor correspondente.
Application Navigator
O Applications - Navigator oferece uma visão lógica da aplicação e dos dados contidos nela.
Esse navegador fornece uma infraestrutura à qual as diversas extensões podem se conectar.
Essas extensões também podem usar a infraestrutura para organizar seus dados e menus de
forma consistente e abstrata. Embora o Applications - Navigator possa conter arquivos
individuais (como arquivos-fonte Java), ele foi projetado para consolidar dados complexos.
Nesse navegador, os tipos de dados complexos, como objetos de entidades, diagramas UML,
EJB ou serviços Web, aparecem como nós únicos. Os arquivos brutos que compõem esses nós
abstratos são exibidos na janela Structure.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Objetivos
Esta lição explica como obter dados de mais de uma tabela. Uma join é usada para visualizar
informações de diversas tabelas. Portanto, você pode join as tabelas para visualizar informações
de mais de uma tabela.
Observação: Informações sobre joins podem ser encontradas na seção “SQL Queries and
Subqueries: Joins” em Oracle Database SQL Language Reference 11g, Release 1 (11.1).
EMPLOYEES DEPARTMENT
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Produtos Cartesianos
Quando uma condição de join é inválida ou omitida completamente, o resultado é um Produto
Cartesiano, no qual todas as combinações de linha são exibidas. Em outras palavras, todas as
linhas na primeira tabela são unidas a todas as linhas da segunda tabela.
Um Produto Cartesiano tende a gerar um grande número de linhas e o resultado raramente é útil.
Portanto, você deverá sempre incluir uma condição de join válida a não ser que você precise
especificamente combinar todas as linhas de todas as tabelas.
No entanto, os Produtos Cartesianos são úteis para alguns testes, quando você precisa gerar um
grande número de linhas para simular uma quantidade razoável de dados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
• Equijoin
• Não-equijoin
• Join externa
• Self-join
Tipos de Joins
Para unir tabelas, você pode usar a sintaxe de join da Oracle.
Observação: Antes do lançamento do Oracle9i , a sintaxe de join era proprietária. A sintaxe join
compatível com SQL:1999– não oferece nenhum benefício de desempenho em relação à sintaxe
join proprietária da Oracle.
A Oracle não possui uma sintaxe equivalente para oferecer suporte à FULL OUTER JOIN da
sintaxe join compatível com SQL:1999.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
EMPLOYEES DEPARTMENT
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Equijoins
Para determinar o nome do departamento de um funcionário, você compara o valor na coluna
DEPARTMENT_ID na tabela EMPLOYEES aos valores DEPARTMENT_ID na tabela
DEPARTMENTS. O relacionamento entre as tabelas EMPLOYEES e DEPARTMENTS é uma
equijoin; ou seja, os valores nas colunas DEPARTMENT_ID em ambas as tabelas devem ser
iguais. Com frequência, esse tipo de join envolve complementos de chaves primárias e
estrangeiras.
Observação: Equijoins também são chamadas de joins simples ou joins internas.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
EMPLOYEE JOB_GRADES
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Não-equijoins
Uma não-equijoin é uma condição de join que contém algo além de um operador de igualdade.
A relação entre as tabelas EMPLOYEES e JOB_GRADES é um exemplo de não-equijoin. A
coluna SALARY na tabela EMPLOYEES contém intervalos entre os valores nas colunas
LOWEST_SAL e HIGHEST_SAL da tabela JOB_GRADES. Portanto, cada funcionário poderá
ser classificado com base no salário. A relação é obtida com o uso de um operador diferente do
operador de igualdade (=).
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
DEPARTMENT EMPLOYEE
Não há funcionários no
departamento 190.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
• Você usa uma join externa para ver linhas que não
atendem à condição de join.
• O operador de join externa é o sinal de mais (+).
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Copyright © 2011, Oracle e/ou suas empresas afiliadas. Todos os direitos reservados.
Self-Join: Exemplo
O exemplo do slide une a tabela EMPLOYEES a ela mesma. Para simular duas tabelas na
cláusula FROM, há dois apelidos (worker e manager) na mesma tabela, EMPLOYEES.
Neste exemplo, a cláusula WHERE contém a join que significa “onde o número do gerente de um
trabalhador corresponde ao número de funcionário do gerente”.
Sumário
Há várias maneiras de unir as tabelas.
Tipos de Joins
• Equijoins
• Não-equijoins
• Joins externas
• Self-joins
Produtos Cartesianos
Um Produto Cartesiano resulta na exibição de todas as combinações de linhas. Isso é feito pela
omissão da cláusula WHERE.
Apelidos de Tabela
• Apelidos de tabela aceleram o acesso ao banco de dados.
• Os apelidos de tabela podem ajudar a manter o código SQL menor, poupando memória.
S
Seleção 1-4, 2-4, E-12
X
XML C-7, C-9, C-26, C-27, C-30, E-3, E-12, I-9, I-14, I-39