Você está na página 1de 456

Introduo ao Oracle: SQL e PL/SQL

Guia do Estudante Volume 1

41010BP13 Produo 1.3 Fevereiro de 2000 M08944-BP

Autores
Neena Kochhar Ellen Gravina Priya Nathan

Copyright Oracle Corporation, 1998, 1999. Todos os direitos reservados e de titularidade da Oracle Corporation, inclusive aqueles referentes traduo para o idioma portugus - Brasil. Esta documentao contm informaes de propriedade da Oracle Corporation. fornecida sob um contrato de licena que contm restries sobre seu uso e sua divulgao, sendo tambm protegida pela legislao de direitos autorais. No permitida a engenharia reversa dos programas de computador. Se esta documentao for entregue/distribuda a uma Agncia do Departamento de Defesa do Governo dos Estados Unidos da Amrica do Norte, ser ento entregue/distribuda com Direitos Restritos e a seguinte legenda ser aplicvel: Legenda de Direitos Restritos O uso, duplicao ou divulgao por aquele Governo esto sujeitos s restries aplicveis aos programas comerciais de computadores e sero considerados como programas de computador com Direitos Restritos de acordo com a legislao federal daquele Governo, conforme descrito no subpargrafo da legislao norte-americana (c) (1) (ii) de DFARS 252.227-7013, Direitos sobre Dados Tcnicos e Programas de Computador (outubro de 1988). Proibida a reproduo total ou parcial desta documentao sem a expressa autorizao prvia por escrito da Oracle Corporation ou da Oracle do Brasil Sistemas Ltda. A cpia deste material, de qualquer forma ou por qualquer meio, eletrnico, mecnico ou de outra natureza, inclusive atravs de processos xerogrficos, de fotocpia e de gravao, constitui violao da legislao de direitos autorais e ser punida civil e-ou criminalmente na forma da lei. Se esta documentao for entregue / distribuda a uma Agncia do Governo dos Estados Unidos da Amrica do Norte que no esteja subordinada ao Departamento de Defesa, ser ento entregue / distribuda com "Direitos Restritos", conforme definido no FAR 52.227-14, Direitos sobre Dados - Geral, inclusive a Alternativa III (junho de 1987). As informaes contidas neste documento esto sujeitas a alteraes sem aviso prvio. Se voc encontrar algum problema na documentao, envie a Products Education - Oracle Corporation ou a Education - Oracle do Brasil Sistemas Ltda. uma descrio de tal problema por escrito. Education Products, Oracle Corporation, 500 Oracle Parkway, Box SB-6, Redwood Shores, CA 94065. Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda. Rua Jos Guerra, 127, So Paulo, SP - 04719-030 Brasil CGC: 59.456.277/0001-76. A Oracle Corporation e a Oracle do Brasil Sistemas Ltda. no garantem que este documento esteja isento de erros. Oracle e todos os demais produtos Oracle citados nesta documentao so marcas comerciais ou marcas comerciais registradas da Oracle Corporation. Todos os outros nomes de produtos ou de empresas aqui mencionados o so apenas para fins de identificao e podem ser marcas comerciais registradas de seus respectivos proprietrios.

Colaboradores Tcnicos e Revisores


Claire Bennet Christa Miethaner Tony Hickman Sherin Nassa Nancy Greenberg Hazel Russell Kenneth Goetz Piet van Zon Ulrike Dietrich Helen Robertson Thomas Nguyen Lisa Jansson Kuljit Jassar

Editor
Jerry Brosnan

Sumrio

Prefcio Mapa de Curso Introduo Objetivos I-2 Ciclo de Vida de Desenvolvimento do Sistema I-3 Armazenamento de Dados em Diferentes Mdias I-5 Conceito de Banco de Dados Relacional I-6 Definio de Banco de Dados Relacional I-7 Modelos de Dados I-8 Modelo de Relacionamento de Entidades I-9 Convenes de Modelo para Relacionamento de Entidades I-11 Terminologia de Banco de Dados Relacional I-13 Relacionando Vrias Tabelas I-15 Propriedades de Banco de Dados Relacional I-17 Comunicando-se com um RDBMS Usando o SQL I-18 Sistema de Gerenciamento de Banco de Dados Relacional I-19 Oracle8: Sistema de Gerenciamento de Banco de Dados Relacional de Objeto I-20 Oracle8i: Banco de Dados de Plataforma Internet para Recursos de Computao na Internet I-21 Plataforma Internet da Oracle I-23 Instrues SQL I-24 Sobre PL/SQL I-25 Ambiente PL/SQL I-26 Tabelas Usadas no Curso I-27 Sumrio I-28 1 Criando Instrues SQL Bsicas Objetivos 1-2 Recursos das Instrues SELECT SQL 1-3 Instruo SELECT Bsica 1-4 Criando Instrues SQL 1-5 Selecionando Todas as Colunas 1-6 Selecionando Colunas Especficas 1-7 Defaults de Cabealho de Coluna 1-8 Expresses Aritmticas 1-9 Usando Operadores Aritmticos 1-10

iii

Precedncia do Operador 1-11 Usando Parnteses 1-13 Definindo um Valor Nulo 1-14 Valores Nulos nas Expresses Aritmticas 1-15 Definindo um Apelido de Coluna 1-16 Usando Apelidos de Coluna 1-17 Operador de Concatenao 1-18 Usando um Operador de Concatenao 1-19 Strings Literais de Caracteres 1-20 Usando Strings Literais de Caracteres 1-21 Linhas Duplicadas 1-22 Eliminando Linhas Duplicadas 1-23 Interao SQL e SQL*Plus 1-24 Instrues SQL Versus Comandos SQL*Plus 1-25 Viso Geral do SQL*Plus 1-26 Estabelecendo Login no SQL*Plus 1-27 Exibindo a Estrutura de Tabela 1-28 Comandos de Edio do SQL*Plus 1-30 Comandos de Arquivo do SQL*Plus 1-32 Sumrio 1-33 Viso Geral do Exerccio 1-34 2 Restringindo e Classificando Dados Objetivos 2-2 Limitando Linhas Usando uma Seleo 2-3 Limitando Linhas Selecionadas 2-4 Usando a Clusula WHERE 2-5 Strings de Caractere e Datas 2-6 Operadores de Comparao 2-7 Usando Operadores de Comparao 2-8 Outros Operadores de Comparao 2-9 Usando o Operador BETWEEN 2-10 Usando o Operador IN 2-11 Usando o Operador LIKE 2-12 Usando o Operador IS NULL 2-14 Operadores Lgicos 2-15 Usando o Operador AND 2-16 Usando o Operador OR 2-17 Usando o Operador NOT 2-18 Regras de Precedncia 2-19 Clusula ORDER BY 2-22
iv

Classificando em Ordem Decrescente 2-23 Classificando por Apelido de Coluna 2-24 Classificando por Vrias Colunas 2-25 Sumrio 2-26 Viso Geral do Exerccio 2-27 3 Funes de Uma nica Linha Objetivos 3-2 Funes SQL 3-3 Dois Tipos de Funes SQL 3-4 Funes de Uma nica Linha 3-5 Funes de Caractere 3-7 Funes de Converso de Maisculas e Minsculas 3-9 Usando Funes de Converso de Maisculas e Minsculas 3-10 Funes de Manipulao de Caractere 3-11 Usando as Funes de Manipulao de Caractere 3-12 Funes Numricas 3-13 Usando a Funo ROUND 3-14 Usando a Funo TRUNC 3-15 Usando a Funo MOD 3-16 Trabalhando com Datas 3-17 Aritmtica com Datas 3-18 Usando Operadores Aritmticos com Datas 3-19 Funes de Data 3-20 Usando Funes de Data 3-21 Funes de Converso 3-23 Converso Implcita de Tipo de Dados 3-24 Converso Explcita de Tipo de Dados 3-26 Funo TO_CHAR com Datas 3-29 Elementos de Modelo de Formato de Data 3-30 Usando a Funo TO_CHAR com Datas 3-32 Funo TO_CHAR com Nmeros 3-33 Usando a Funo TO_CHAR com Nmeros 3-34 Funes TO_NUMBER e TO_DATE 3-35 Formato de Data RR 3-36 Funo NVL 3-37 Usando a Funo NVL 3-38 Funo DECODE 3-39 Usando a Funo DECODE 3-40 Aninhando Funes 3-42 Sumrio 3-44 Viso Geral do Exerccio 3-45
v

Exibindo Dados de Vrias Tabelas Objetivos 4-2 Obtendo Dados de Vrias Tabelas 4-3 O Que uma Juno? 4-4 Produto Cartesiano 4-5 Gerando um Produto Cartesiano 4-6 Tipos de Junes 4-7 O Que uma Juno Idntica? 4-8 Recuperando Registros com Junes Idnticas 4-9 Qualificando Nomes de Coluna Ambguos 4-10 Condies de Pesquisa Adicional Usando o Operador AND Usando Apelidos de Tabela 4-12 Unindo Mais de Duas Tabelas 4-13 Junes No-idnticas 4-14 Recuperando Registros com Junes No-idnticas 4-15 Junes Externas 4-16 Usando Junes Externas 4-18 Autojunes 4-19 Unindo uma Tabela a Ela Mesma 4-20 Sumrio 4-21 Viso Geral do Exerccio 4-22 Agregando Dados Usando Funes de Grupo Objetivos 5-2 O Que So Funes de Grupo? 5-3 Tipos de Funes de Grupo 5-4 Usando Funes de Grupo 5-5 Usando Funes AVG e SUM 5-6 Usando Funes MIN e MAX 5-7 Usando a Funo COUNT 5-8 Funes de Grupo e Valores Nulos 5-10 Usando a Funo NVL com Funes de Grupo 5-11 Criando Grupos de Dados 5-12 Criando Grupos de Dados: Clusula GROUP BY 5-13 Usando a Clusula GROUP BY 5-14 Agrupando por Mais de Uma Coluna 5-16 Usando a Clusula GROUP BY em Vrias Colunas 5-17 Consultas Ilegais Usando Funes de Grupo 5-18 Excluindo Resultados do Grupo 5-20 Excluindo Resultados do Grupo: Clusula HAVING 5-21 Usando a Clusula HAVING 5-22
vi

4-11

Aninhando Funes de Grupo 5-24 Sumrio 5-25 Viso Geral do Exerccio 5-26 6 Subconsultas Objetivos 6-2 Usando uma Subconsulta para Resolver um Problema 6-3 Subconsultas 6-4 Usando uma Subconsulta 6-5 Diretrizes para o Uso de Subconsultas 6-6 Tipos de Subconsultas 6-7 Subconsultas de uma nica Linha 6-8 Executando Subconsultas de uma nica Linha 6-9 Usando Funes de Grupo em uma Subconsulta 6-10 Clusula HAVING com Subconsultas 6-11 O Que H de Errado com esta Instruo? 6-12 Esta Instruo Ir Funcionar? 6-13 Subconsultas de Vrias Linhas 6-14 Usando o Operador ANY em Subconsultas de Vrias Linhas 6-15 Usando o Operador ALL em Subconsultas de Vrias Linhas 6-16 Sumrio 6-17 Viso Geral do Exerccio 6-18 Subconsultas de Vrias Colunas Objetivos 7-2 Subconsultas de Vrias Colunas 7-3 Usando Subconsultas de Vrias Colunas 7-4 Comparaes de Coluna 7-6 Subconsulta de Comparao que No Seja aos Pares 7-7 Subconsulta que No Seja aos Pares 7-8 Valores Nulos em uma Subconsulta 7-9 Usando uma Subconsulta na Clusula FROM 7-10 Sumrio 7-11 Viso Geral do Exerccio 7-12 Produzindo uma Sada Legvel com o SQL*Plus Objetivos 8-2 Relatrios Interativos 8-3 Variveis de Substituio 8-4 Usando a Varivel de Substituio & 8-5 Usando o Comando SET VERIFY 8-6 Valores de Caractere e Data com Variveis de Substituio 8-7
vii

Especificando Nomes de Coluna, Expresses e Texto no Tempo de Execuo 8-8 Usando a Varivel de Substituio && 8-10 Definindo as Variveis de Usurio 8-11 O Comando ACCEPT 8-12 Usando o Comando ACCEPT 8-13 Comandos DEFINE e UNDEFINE 8-14 Usando o Comando DEFINE 8-15 Personalizando o Ambiente SQL*Plus 8-16 Variveis do Comando SET 8-17 Salvando as Personalizaes no Arquivo login.sql 8-18 Comandos de Formato do SQL*Plus 8-19 O Comando COLUMN 8-20 Usando o Comando COLUMN 8-21 Modelos de Formato COLUMN 8-22 Usando o Comando BREAK 8-23 Usando os Comandos TTITLE e BTITLE 8-24 Criando um Arquivo de Script para Executar um Relatrio 8-25 Exemplo de Relatrio 8-27 Sumrio 8-28 Viso Geral do Exerccio 8-29 9 Manipulao de Dados Objetivos 9-2 DML (Data Manipulation Language) 9-3 Adicionando uma Nova Linha em uma Tabela 9-4 A Instruo INSERT 9-5 Inserindo Novas Linhas 9-6 Inserindo Linhas com Valores Nulos 9-7 Inserindo Valores Especiais 9-8 Inserindo Valores Espec'ificos de Data 9-9 Inserindo Valores Usando Variveis de Substituio 9-10 Criando um Script com Prompts Personalizados 9-11 Copiando Linhas a partir de Outra Tabela 9-12 Alterando os Dados em uma Tabela 9-13 A Instruo UPDATE 9-14 Atualizando Linhas em uma Tabela 9-15 Atualizando com Subconsulta de Vrias Colunas 9-16 Atualizando Linhas Baseadas em Outra Tabela 9-17 Atualizando Linhas: Erro de Restrio de Integridade 9-18 Removendo uma Linha de uma Tabela 9-19 A Instruo DELETE 9-20
viii

Deletando Linhas de uma Tabela 9-21 Deletando Linhas Baseadas em Outra Tabela 9-22 Deletando Linhas: Erro de Restrio de Integridade 9-23 Transaes de Banco de Dados 9-24 Vantagens das Instrues COMMIT e ROLLBACK 9-26 Controlando Transaes 9-27 Processando Transaes Implcitas 9-28 Estado dos Dados Antes do COMMIT ou ROLLBACK 9-29 Estado dos Dados Aps COMMIT 9-30 Submetendo Dados a Commit 9-31 Estado dos Dados Aps ROLLBACK 9-32 Fazendo Roll Back de Alteraes para um Marcador 9-33 Rollback no Nvel da Instruo 9-34 Consistncia na Leitura 9-35 Implementao da Consistncia na Leitura 9-36 Bloqueando 9-37 Sumrio 9-38 Viso Geral do Exerccio 9-39 10 Criando e Gerenciando Tabelas Objetivos 10-2 Objetos do Banco de Dados 10-3 Convenes para Nomeao 10-4 A Instruo CREATE TABLE 10-5 Fazendo Referncia a Tabelas de Outro Usurio 10-6 A Opo DEFAULT 10-7 Criando Tabelas 10-8 Tabelas no Banco de Dados Oracle 10-9 Consultando o Dicionrio de Dados 10-10 Tipos de Dados 10-11 Criando uma Tabela Usando uma Subconsulta 10-13 A Instruo ALTER TABLE 10-15 Adicionando uma Coluna 10-16 Modificando uma Coluna 10-18 Eliminando uma Coluna 10-19 Opo SET UNUSED 10-20 Eliminando uma Tabela 10-22 Alterando o Nome de um Objeto 10-23 Truncando uma Tabela 10-24 Adicionando Comentrios a uma Tabela 10-25 Sumrio 10-26 Viso Geral do Exerccio 10-27
ix

11 Incluindo Restries Objetivos 11-2 O Que So Restries? 11-3 Diretrizes sobre Restries 11-4 Definindo Restries 11-5 A Restrio NOT NULL 11-7 A Restrio UNIQUE KEY 11-9 A Restrio PRIMARY KEY 11-11 A Restrio FOREIGN KEY 11-13 Palavras-chave da Restrio FOREIGN KEY 11-15 A Restrio CHECK 11-16 Adicionando uma Restrio 11-17 Eliminando uma Restrio 11-19 Desativando Restries 11-20 Ativando Restries 11-21 Restries em Cascata 11-22 Verificando Restries 11-24 Verificando Colunas Associadas com Restries 11-25 Sumrio 11-26 Viso Geral do Exerccio 11-27 12 Criando Views Objetivos 12-2 Objetos de Banco de Dados 12-4 O Que uma View? 12-5 Por Que Usar Views? 12-6 Views Simples e Views Complexas 12-7 Criando uma View 12-8 Recuperando Dados de uma View 12-11 Consultando uma View 12-12 Modificando uma View 12-13 Criando uma View Complexa 12-14 Regras para Executar Operaes DML em uma View 12-15 Usando a Clusula WITH CHECK OPTION 12-17 Negando Operaes DML 12-18 Removendo uma View 12-19 Views Em Linha 12-20 Anlise "Top-N 12-21 Executando a Anlise Top-N 12-22 Exemplo de Anlise Top-N 12-23 Sumrio 12-24 Viso Geral do Exerccio 12-26
x

13 Outros Objetos do Banco de Dados Objetivos 13-2 Objetos do Banco de Dados 13-3 O Que uma Seqncia? 13-4 A Instruo CREATE SEQUENCE 13-5 Criando uma Seqncia 13-7 Confirmando Seqncias 13-8 Pseudocolunas NEXTVAL e CURRVAL 13-9 Usando uma Seqncia 13-11 Modificando uma Seqncia 13-13 Diretrizes para Modificar uma Seqncia 13-14 Removendo uma Seqncia 13-15 O Que um ndice? 13-16 Como os ndices so Criados? 13-17 Criando um ndice 13-18 Quando Criar um ndice 13-19 Quando No Criar um ndice 13-20 Confirmando ndices 13-21 ndices Baseados em Funo 13-22 Removendo um ndice 13-23 Sinnimos 13-24 Criando e Removendo Sinnimos 13-25 Sumrio 13-26 Viso Geral do Exerccio 13-27 14 Controlando o Acesso do Usurio Objetivos 14-2 Controlando o Acesso do Usurio 14-3 Privilgios 14-4 Privilgios de Sistema 14-5 Criando Usurios 14-6 Privilgios de Sistema de Usurio 14-7 Concedendo Privilgios de Sistema 14-8 O Que uma Funo? 14-9 Criando e Concedendo Privilgios a uma Funo 14-10 Alterando Sua Senha 14-11 Privilgios de Objeto 14-12 Concedendo Privilgios de Objeto 14-14 Usando as Palavras-chave WITH GRANT OPTION e PUBLIC 14-15 Confirmando Privilgios Concedidos 14-16 Como Revogar Privilgios de Objeto 14-17

xi

Revogando Privilgios de Objeto 14-18 Sumrio 14-19 Viso Geral do Exerccio 14-20 15 SQL Workshop Viso Geral do Workshop 15-2 16 Declarando Variveis Objetivos 16-2 Sobre PL/SQL 16-3 Benefcios da Linguagem PL/SQL 16-4 Estrutura de Bloco PL/SQL 16-6 Tipos de Bloco 16-8 Construes de Programa 16-9 Uso de Variveis 16-11 Tratando Variveis em PL/SQL 16-12 Tipos de Variveis 16-13 Declarando Variveis PL/SQL 16-16 Regras para Nomeao 16-18 Atribuindo Valores s Variveis 16-19 Palavras-chave e Inicializao de Variveis 16-20 Tipos de Dados Escalares 16-22 Tipos de Dados Escalares Bsicos 16-23 Declarando Variveis Escalares 16-25 O Atributo %TYPE 16-26 Declarando Variveis com o Atributo %TYPE 16-27 Declarando Variveis Booleanas 16-28 Estrutura de Registro PL/SQL 16-29 Variveis de Tipo de Dados LOB 16-30 Variveis de Ligao 16-31 Referenciando Variveis No-PL/SQL 16-33 DBMS_OUTPUT.PUT_LINE 16-34 Sumrio 16-35 Viso Geral do Exerccio 16-37 17 Criando Instrues Executveis Objetivos 17-2 Diretrizes e Sintaxe de Bloco PL/SQL 17-3 Comentando Cdigo 17-6 Funes SQL em PL/SQL 17-7 Funes PL/SQL 17-8 Converso de Tipo de Dados 17-9
xii

Blocos Aninhados e Escopo de Varivel 17-11 Operadores em PL/SQL 17-14 Usando Variveis de Ligao 17-16 Diretrizes de Programao 17-17 Convenes para Nomeao de Cdigo 17-18 Endentando o Cdigo 17-19 Determinando o Escopo da Varivel 17-20 Sumrio 17-21 Viso Geral do Exerccio 17-22 18 Interagindo com o Oracle Server Objetivos 18-2 Instrues SQL em PL/SQL 18-3 Instrues SELECT em PL/SQL 18-4 Recuperando Dados em PL/SQL 18-6 Manipulando Dados Usando o PL/SQL 18-8 Inserindo Dados 18-9 Atualizando Dados 18-10 Deletando Dados 18-11 Convenes para Nomeao 18-12 Instrues COMMIT e ROLLBACK 18-14 Cursor SQL 18-15 Atributos do Cursor SQL 18-16 Sumrio 18-18 Viso Geral do Exerccio 18-20 19 Criando Estruturas para Controle Objetivos 19-2 Controlando o Fluxo de Execuo PL/SQL 19-3 Instrues IF 19-4 Instrues IF Simples 19-5 Fluxo de Execuo da Instruo IF-THEN-ELSE 19-6 Instrues IF-THEN-ELSE 19-7 Fluxo de Execuo da Instruo IF-THEN-ELSIF 19-8 Instrues IF-THEN-ELSIF 19-9 Elaborando Condies Lgicas 19-10 Tabelas Lgicas 19-11 Condies Booleanas 19-12 Controle Iterativo: Instrues LOOP 19-13 Loop Bsico 19-14 Loop FOR 19-16

xiii

Loop WHILE 19-19 Loops e Labels Alinhados 19-21 Sumrio 19-23 Viso Geral do Exerccio 19-24 20 Trabalhando com Tipos de Dados Compostos Objetivos 20-2 Tipos de Dados Compostos 20-3 Registros PL/SQL 20-4 Criando um Registro PL/SQL 20-5 Estrutura de Registro PL/SQL 20-7 O Atributo %ROWTYPE 20-8 Vantagens de Usar %ROWTYPE 20-9 O Atributo %ROWTYPE 20-10 Tabelas PL/SQL 20-11 Criando uma Tabela PL/SQL 20-12 Estrutura de Tabela PL/SQL 20-13 Criando uma Tabela PL/SQL 20-14 Usando Mtodos de Tabela PL/SQL 20-15 Tabela de Registros PL/SQL 20-16 Exemplo de Tabela de Registros PL/SQL 20-17 Sumrio 20-18 Viso Geral do Exerccio 20-19 21 Criando Cursores Explcitos Objetivos 21-2 Sobre os Cursores 21-3 Funes do Cursor Explcito 21-4 Controlando Cursores Explcitos 21-5 Declarando o Cursor 21-7 Abrindo o Cursor 21-9 Extraindo Dados do Cursor 21-11 Fechando o Cursor 21-13 Atributos do Cursor Explcito 21-14 Controlando Vrias Extraes 21-15 O Atributo %ISOPEN 21-16 Os Atributos %NOTFOUND e %ROWCOUNT 21-17 Cursores e Registros 21-19 Loops FOR de Cursor 21-20 Loops FOR do Cursor Usando Subconsultas 21-22 Sumrio 21-23 Viso Geral do Exerccio 21-25
xiv

22 Conceitos de Cursor Explcito Avanados Objetivos 22-2 Cursores com Parmetros 22-3 A Clusula FOR UPDATE 22-5 A Clusula WHERE CURRENT OF 22-7 Cursores com Subconsultas 22-9 Sumrio 22-10 Viso Geral do Exerccio 22-11 23 Tratando Excees Objetivos 23-2 Tratando Excees com Cdigo PL/SQL 23-3 Tratando Excees 23-4 Tipos de Exceo 23-5 Capturando Excees 23-6 Diretrizes para a Captura de Excees 23-7 Capturando Erros Predefinidos do Oracle Server 23-8 Exceo Predefinida 23-10 Capturando Erros No Predefinidos do Oracle Server 23-11 Erro No Predefinido 23-12 Funes para Captura de Excees 23-13 Capturando Excees Definidas pelo Usurio 23-15 Exceo Definida pelo Usurio 23-16 Ambientes de Chamada 23-17 Propagando Excees 23-18 Procedimento RAISE_APPLICATION_ERROR 23-19 Sumrio 23-21 Viso Geral do Exerccio 23-22 A Solues Prticas B Descries da Tabela e Dados ndice

xv

xvi

Prefcio

Prefcio - 2

Perfil Antes de Iniciar Este Curso Antes de iniciar este curso, voc deve ser capaz de usar uma GUI (Graphical User Interface, interface grfica com o usurio). O pr-requisito necessrio estar familiarizado com conceitos e tcnicas de processamento de dados. Como Este Curso Est Organizado Introduo ao Oracle: SQL and PL/SQL um curso orientado por instrutor contendo palestras e exerccios prticos. Sesses de demonstrao on-line e de exerccio escrito reforam os conceitos e tcnicas apresentadas.

Prefcio - 3

Publicaes Relacionadas Publicaes da Oracle Ttulo Oracle8i Server, Release 8.1.5 Oracle8i Concepts, Release 8.1.5 Oracle8i SQL Reference Manual, Release 8.1.5 Oracle8i Server Application Developers Guide SQL*Plus Users Guide and Reference, Release 8.1.5 SQL*Plus Quick Reference, Release 8.1.5 PL/SQL Users Guide and Reference, Release 8.1.5 Publicaes Adicionais Boletins sobre verso do sistema Guias de instalao e do usurio arquivos README artigos do International Oracle User's Group (IOUG) Oracle Magazine Nmero do Componente A68826-01 A67781-01 A67779-01 A68003-01 A66736-01 A66735-01 A67842-01

Prefcio - 4

Convenes Tipogrficas A seguir esto duas listas de convenes tipogrficas usadas especificamente dentro de texto ou de cdigo. Convenes Tipogrficas Dentro de Texto Conveno Letras maisculas Objeto ou Condio Comandos, funes, nomes de coluna, nomes de tabelas, objetos PL/SQL, esquemas Nomes de arquivo, variveis de sintaxe, nomes de usurio, senhas Nomes de gatilho nomes de boto Exemplo Use o comando SELECT para visualizar informaes armazenadas na coluna LAST_NAME coluna da tabela EMP.

Letras minsculas, itlico

onde:

funo o nome da funo a ser criada.

Inicial maiscula

Atribua um gatilho a When-Validate-Item ao bloco ORD. Escolha Cancelar.

Itlico

Livros, nomes de cursos e manuais e palavras ou frases enfatizadas Ttulos de mdulo de lio a que feito referncia dentro de um curso

Para obter mais informaes sobre o assunto, consulte o Oracle Server SQL Language Reference Manual No salve alteraes para o banco de dados.

Aspas

Este assunto abordado na Lio 3, "Trabalhando com Objetos".

Prefcio - 5

Convenes Tipogrficas (continuao) Convenes Tipogrficas Dentro de Cdigo Conveno Letras maisculas Letras minsculas, itlico Inicial maiscula Objeto ou Termo Comandos, funes Variveis de sintaxe Gatilhos de forms Exemplo
SQL> SELECT userid 2 FROM emp; SQL> CREATE ROLE role; Form module: ORD Trigger level: S_ITEM.QUANTITY item Trigger name: When-Validate-Item . . . . . . OG_ACTIVATE_LAYER (OG_GET_LAYER ('prod_pie_layer')) . . . SQL> SELECT last_name 2 FROM emp;

Letra minscula

Nomes de colunas, nomes de tabelas, nomes de arquivos, objetos do PL/SQL

Negrito

Texto que deve ser includo por um usurio

SQLDBA> 2>

DROP USER scott IDENTIFIED BY tiger;

Prefcio - 6

Mapa de Curso

Curso de Linguagens Integradas: Linhas de Certificao


Introduo ao Oracle: SQL e PL/SQL PL/SQL SQL1 Fundamentals Introduo ao Oracle para Usurios Experientes em SQL Oracle SQL PL/SQL Specifics Fundamentals

ou

Linha do DBA
Desenvolvimento de Unidades de Programa em PL/SQL

Linha do Application Developer

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Curso de Linguagens Integradas: Linhas de Certificao Introduo ao Oracle: SQL e PL/SQL consiste em dois mdulos, SQL1 e PL/SQL Fundamentals. Esse curso pr-requisito para a linha do DBA ou Application Developer. O SQL1 abrange a criao de estruturas de bancos de dados e o armazenamento, recuperao e manipulao de dados em um banco de dados relacional. O curso PL/SQL Fundamentals abrange a criao de blocos PL/SQL de cdigo de aplicao. Para aqueles que trabalharam com outros bancos de dados relacionais e tm conhecimentos de SQL, oferecido outro mdulo chamado Oracle SQL Specifics. Ele abrange as instrues SQL que no fazem parte do ANSI SQL mas so especficas do Oracle. Esse mdulo combinado com o PL/SQL Fundamentals forma o Introduo ao Oracle para Usurios Experientes em SQL. Introduo ao Oracle: O SQL e PL/SQL e a Introduo ao Oracle para Usurios Experientes em SQL so considerados equivalentes e, aps terminar um deles, voc poder passar para a linha de DBA. Para a linha do Application Developer, voc deve fazer o curso Desenvolvimento de Unidades de Programa em PL/SQL. Esse curso ensina como criar funes, pacotes, acionadores e procedimentos PL/SQL.

Mapa de Curso - 2

Curso de Linguagens Integradas


SQL1
Basic SELECT Statements Data Retrieval Techniques DML and DDL

Oracle SQL Specifics


Retrieving & Formatting Data Creating & Managing Database Objects

SQL for End Users Oracle8 3GL Oracle8 3GL Precompiler Precompiler Workshop Workshop Oracle8 Call Interface Oracle8 Call Interface Workshop Workshop
Advanced Techniques for PL/SQL Developers PL/SQL Best Practices Oracle8: New Features in PL/SQL Oracle Built-in Packages

Extended Data Retrieval with SQL


Advanced SELECT Statements SQL*Plus and Reporting

PL/SQL Fundamentals
Basics

Develop PL/SQL Program Units


Procedures, Functions, and Packages Database Programming

SQL Statement Tuning


Diagnostics Rules and Guidelines

Advanced PL/SQL
ILT CBT Seminar

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Curso de Linguagens Integradas O slide lista vrios mdulos e cursos disponveis no curso de linguagens. Para a maioria desses mdulos e cursos, h CBTs equivalentes. Curso ou Mdulo CBT Equivalente SQL1 Oracle SQL: Basic SELECT Statements Oracle SQL: Data Retrieval Techniques Oracle SQL: DML and DDL Oracle SQL Specifics Oracle SQL Specifics: Retrieving and Formatting Data Oracle SQL Specifics: Creating and Managing Database Objects PL/SQL Fundamentals PL/SQL: Basics Extended Data Retrieval with Oracle SQL and SQL*Plus: Advanced SELECT Statements SQL Oracle SQL and SQL*Plus: SQL*Plus and Reporting Develop PL/SQL Program Units PL/SQL: Procedures, Functions, and Packages PL/SQL: Database Programming SQL Statement Tuning SQL and PL/SQL Tuning: Diagnostics SQL and PL/SQL Tuning: Rules and Guidelines So oferecidos quatro seminrios sobre PL/SQL: Advanced Techniques for PL/SQL Developers, PL/SQL Best Practices, Oracle8: New Features in PL/SQL e Oracle Built-in Packages.

Mapa de Curso - 3

Mapa de Curso - 4

I
Introduo

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Discutir os aspectos tericos e fsicos de um banco de dados relacional Descrever a implementao Oracle do RDBMS e ORDBMS Descrever os novos recursos do Oracle8i Descrever como o SQL e o PL/SQL so usados no conjunto de produtos Oracle Descrever o uso e os benefcios do PL/SQL
I-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc entender o RDBMS (relational database management system) e o ORDBMS (object relational database management system). Voc tambm ser apresentado aos seguintes tpicos: Instrues SQL especficas do Oracle SQL*Plus, usado para executar o SQL e para fins de formatao e elaborao de relatrios O PL/SQL, que a linguagem procedural do Oracle

Introduo ao Oracle: SQL e PL/SQL I-2

Ciclo de Vida de Desenvolvimento do Sistema


Estratgia e Anlise Design Elaborao e Documentao Transio Produo

I-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Ciclo de Vida de Desenvolvimento do Sistema Do conceito produo, voc pode desenvolver um banco de dados usando o ciclo de vida de desenvolvimento do sistema, que contm vrios estgios de desenvolvimento. Essa abordagem completa e sistemtica para o desenvolvimento de bancos de dados transforma necessidades de informaes comerciais em um banco de dados operacional. Estratgia e Anlise Estude e analise as necessidades comerciais. Entreviste usurios e gerentes para identificar as necessidades de informaes. Incorpore as declaraes de objetivos da aplicao e da empresa, alm de qualquer especificao futura do sistema. Elabore modelos do sistema. Transfira a narrativa comercial para uma representao grfica das regras e necessidades de informaes comerciais. Confirme e refine o modelo com os analistas e especialistas.

Design Projete o banco de dados de acordo com o modelo desenvolvido na fase de estratgia e anlise. Elaborao e Documentao Elabore o sistema prottipo. Crie e execute os comandos para elaborar tabelas e objetos de suporte para o banco de dados. Desenvolva uma documentao para o usurio, textos de ajuda e manuais de operao para suporte ao uso e operao do sistema.
Introduo ao Oracle: SQL e PL/SQL I-3

Ciclo de Vida de Desenvolvimento do Sistema


Estratgia e Anlise Design Elaborao e Documentao Transio Produo

I-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Ciclo de Vida de Desenvolvimento do Sistema (continuao) Transio Refine o prottipo. Mova uma aplicao para a produo com teste de aceitao do usurio, converso de dados existentes e operaes paralelas. Faa as modificaes necessrias. Produo Fornea o sistema aos usurios. Opere o sistema de produo. Monitore o desempenho, aperfeioe e refine o sistema. Observao: possvel executar as vrias fases do ciclo de vida de desenvolvimento do sistema repetidamente. Este curso se concentra na fase de elaborao do ciclo de vida de desenvolvimento do sistema.

Introduo ao Oracle: SQL e PL/SQL I-4

Armazenamento de Dados em Diferentes Mdias


SALGRADE
GRADE LOSAL HISAL --------- --------- --------DEPT 1 700 1200 DEPTNO DNAME LOC 2 1201 1400 --------- -------------- ---------3 1401 2000 10 ACCOUNTING NEW YORK 4 2001 3000 20 RESEARCH DALLAS 5 3001 9999 30 SALES CHICAGO 40 OPERATIONS BOSTON

Planilha eletrnica
I-5

Arquivo fsico

Banco de Dados

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Armazenando Informaes Toda organizao necessita de informaes. Uma biblioteca mantm uma lista de membros, livros, datas de entrega e multas. Uma empresa precisa gravar informaes sobre funcionrios, departamentos e salrios. Essas informaes so chamadas de dados. As organizaes podem armazenar dados em vrias mdias e em formatos diferentes, por exemplo, um documento impresso em um arquivo fsico ou dados em planilhas eletrnicas ou bancos de dados. Um banco de dados um conjunto organizado de informaes. Para gerenciar bancos de dados, voc precisa de DBMSs (database management systems). Um DBMS um programa que armazena, recupera e modifica dados do banco de dados a pedido. H quatro tipos principais de bancos de dados: hierrquico, de rede, relacional e relacional de objeto, o mais recente. Observao: O Oracle7 um RDBMS (relational database management system) e o Oracle8 um ORDBMS (object relational database management system).

Introduo ao Oracle: SQL e PL/SQL I-5

Conceito de Banco de Dados Relacional


O Dr. E.F. Codd props o modelo relacional de sistemas 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 relaes Conjunto de operadores para agir sobre as relaes Integridade de dados para preciso e consistncia

I-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modelo Relacional Os princpios do modelo relacional foram definidos primeiramente pelo Dr. E.F. Codd em junho de 1970 em um estudo chamado "A Relational Model of Data for Large Shared Data Banks". Nesse estudo, o Dr. Codd props o modelo relacional de sistemas de bancos de dados. Os modelos mais populares usados naquele tempo eram hierrquicos, de rede ou mesmo estruturas de dados de arquivos simples. Os RDBMSs (relational database management systems) em breve se tornaram muito populares, especialmente pela facilidade de uso e flexibilidade na estrutura. Alm disso, vrios fornecedores inovadores, como a Oracle, ofereciam o RDBMS com um conjunto eficiente de desenvolvimento de aplicaes e produtos para usurios, formando uma soluo completa. Componentes do Modelo Relacional Conjuntos de objetos ou relaes que armazenam os dados Conjunto de operadores que podem agir sobre as relaes para produzir outras relaes Integridade de dados para preciso e consistncia

Para obter mais informaes, consulte E.F. Codd, The Relational Model for Database Management Version 2 (Reading, Mass.: Addison-Wesley, 1990).

Introduo ao Oracle: SQL e PL/SQL I-6

Definio de Banco de Dados Relacional


Um banco de dados relacional um conjunto de relaes ou tabelas bidimensionais. Banco de Dados

Nome da Tabela: EMP


EMPNO 7839 7698 7782 7566 ENAME KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER DEPTNO 10 30 10 20

Nome da Tabela: DEPT


DEPTNO 10 20 30 40 DNAME ACCOUNTING RESEARCH SALES OPERATIONS LOC NEW YORK DALLAS CHICAGO BOSTON

I-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Definio de Banco de Dados Relacional Um banco de dados relacional usa relaes ou tabelas bidimensionais para armazenar informaes. Por exemplo, voc pode armazenar informaes sobre todos os funcionrios de uma empresa. Em um banco de dados relacional, voc cria vrias tabelas para armazenar informaes diferentes sobre funcionrios, como tabelas de funcionrios, departamentos e salrios.

Introduo ao Oracle: SQL e PL/SQL I-7

Modelos de Dados

Modelo de sistema imaginado pelo cliente

Modelo de entidade do modelo do cliente

Modelo de tabela do modelo de entidade

Servidor

Tabelas em discos
I-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modelos de Dados Os modelos so a base do design. Os engenheiros criam um modelo de carro para estudar os detalhes antes de coloc-lo em produo. Da mesma forma, projetistas de sistemas desenvolvem modelos para explorar idias e compreender melhor o design de um banco de dados. Objetivo dos Modelos Os modelos ajudam a comunicar conceitos imaginados pelas pessoas. possvel us-los com os seguintes objetivos: Comunicar Categorizar Descrever Especificar Investigar Desenvolver Analisar Imitar

O objetivo produzir um modelo que se adapte a vrios usos, possa ser compreendido por um usurio final e contenha detalhes suficientes para que um desenvolvedor crie um sistema de banco de dados.
Introduo ao Oracle: SQL e PL/SQL I-8

Modelo de Relacionamento de Entidades


Crie um diagrama de relacionamento de entidades a partir de narrativas ou especificaes comerciais
EMPLOYEE #* nmero * nome o cargo atribudo a composto de DEPARTMENT #* nmero * nome o localizao

Cenrio "...Atribua um ou mais funcionrios a um departamento..." "...Alguns departamentos ainda no tm funcionrios atribudos a eles..."
I-9 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modelo de Relacionamento de Entidades Em um sistema eficiente, os dados so divididos em categorias ou entidades distintas. Um modelo de relacionamento de entidades (ER) uma ilustrao de vrias entidades em uma empresa e dos relacionamentos entre elas. Um modelo de relacionamento de entidades derivado de narrativas ou especificaes comerciais e criado durante a fase de anlise do ciclo de vida de desenvolvimento do sistema. Os modelos para relacionamento de entidades separam as informaes necessrias para uma empresa das atividades desempenhadas dentro dela. Embora as empresas possam alterar suas atividades, o tipo de informaes tende a permanecer constante. Portanto, as estruturas de dados tambm tendem a ser constantes. Benefcios do Modelo de Relacionamento de Entidades Documenta as informaes da organizao em formato claro e preciso Fornece uma imagem clara do escopo das necessidades de informaes Fornece um mapa ilustrado facilmente compreendido para o design do banco de dados Oferece uma estrutura eficiente para a integrao de vrias aplicaes

Introduo ao Oracle: SQL e PL/SQL I-9

Componentes-chave Entidade: Um item importante sobre o qual necessrio obter informaes. Os exemplos so departamentos, funcionrios e pedidos. Atributo: Um item que descreve ou qualifica uma entidade. Por exemplo, para a entidade de funcionrios, os atributos so o nmero, o nome e o cargo do funcionrio, alm do nmero do departamento e assim por diante. Cada um desses atributos necessrio ou opcional. Esse estado chamado opcionalidade. Relacionamento: Uma associao nomeada entre entidades que demonstra opcionalidade e grau. Os exemplos so funcionrios e departamentos, alm de pedidos e itens.

Introduo ao Oracle: SQL e PL/SQL I-10

Convenes de Modelo para Relacionamento de Entidades


Entidade Soft box Nome exclusivo, individual Letra maiscula Sinnimo entre parnteses Atributo Nome individual Letra minscula Obrigatrio marcado com "*" Opcional marcado com "o"

EMPLOYEE #* nmero * nome o cargo

atribudo a composto de

DEPARTMENT #* nmero * nome o localizao

UID (Identificador nico) Primrio marcado com "#" Secundrio marcado com "(#)"
I-11 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Entidades Para representar uma entidade em um modelo, use as seguintes convenes: Soft box com qualquer dimenso Nome de entidade exclusivo, individual Nome de entidade em letras maisculas Sinnimos opcionais em letras maisculas entre parnteses: ( )

Atributos Para representar um atributo em um modelo, use as seguintes convenes: Use nomes singulares em letras minsculas Marque os atributos obrigatrios ou os valores que devem ser conhecidos com um asterisco: * Marque os atributos opcionais ou valores que podem ser conhecidos com a letra o
Smbolo Linha tracejada Linha contnua P-de-galinha Linha simples Descrio Elemento opcional que indica algo que pode ser Elemento obrigatrio que indica algo que deve ser Elemento de classificao que indica um ou mais Elemento de classificao que indica um nico

Relacionamentos

Introduo ao Oracle: SQL e PL/SQL I-11

Convenes de Modelo para Relacionamento de Entidades


Entidade Soft box Nome exclusivo, individual Letra maiscula Sinnimo entre parnteses Atributo Nome individual Letra minscula Obrigatrio marcado com "*" Opcional marcado com "o"

EMPLOYEE #* nmero * nome o cargo

atribudo a composto de

DEPARTMENT #* nmero * nome o localizao

UID (Identificador nico) Primrio marcado com "#" Secundrio marcado com "(#)"
I-12 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Relacionamentos Cada direo do relacionamento contm: Um nome, por exemplo, atribudo Uma opcionalidade, que indica algo que deve ser ou pode ser Um grau, que indica um nico ou um ou mais

Observao: O termo cardinalidade um sinnimo para o termo grau. Cada entidade de origem {pode ser | deve ser} um nome de relacionamento {um nico | um ou mais} entidade de destino. Observao: A conveno deve ser lida em sentido horrio. Identificadores nicos Um UID (identificador nico) corresponde a qualquer combinao de atributos ou relacionamentos (ou os dois) que serve para diferenciar ocorrncias em uma entidade. Cada ocorrncia de entidade deve ser identificada com exclusividade. Marque cada atributo que faz parte do UID com uma tralha: # Marque os UIDs secundrios com uma tralha entre parnteses: (#)

Introduo ao Oracle: SQL e PL/SQL I-12

Terminologia de Banco de Dados Relacional


2 3 4
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----------10 30 10 20 1400 300 30 30 30 30 500 30 20 20 20 20 10 ------------- ------------ --------------------- -------- ---------------- ----------- -------------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN 7499 ALLEN PRESIDENT MANAGER MANAGER MANAGER SALESMAN SALESMAN 7839 7839 7839 7698 7698 7698 7698 7698 7566 7902 7566 7788 7782 17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82 5000 2850 2450 2975 1250 1600 1500 950 1250 3000 800 3000 1100 1300

7844 TURNER SALESMAN 7900 JAMES 7521 WARD 7902 FORD 7369 7788 7876 SMITH SCOTT ADAMS MILLER CLERK SALESMAN ANALYST CLERK ANALYST CLERK CLERK

1
I-13

7934

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Terminologia de Banco de Dados Relacional Um banco de dados relacional pode conter uma ou vrias tabelas. Uma tabela a estrutura de armazenamento bsica de um RDBMS. Ela armazena todos os dados necessrios sobre algo do mundo real, por exemplo, funcionrios, NFFs ou clientes. O slide mostra o contedo da relao ou tabela EMP. Os nmeros indicam o seguinte: 1. Uma linha simples ou tupla que representa todos os dados necessrios para um funcionrio especfico. Cada linha de uma tabela deve ser identificada por uma chave primria, que no permite linhas duplicadas. A ordem das linhas no importante; especifique essa ordem quando os dados forem recuperados. 2. Uma coluna ou atributo que contm o nmero do funcionrio, que tambm a chave primria. O nmero do funcionrio identifica um nico funcionrio na tabela EMP. Uma chave primria deve conter um valor. 3. Uma coluna que no um valor de chave. Uma coluna representa um tipo de dados em uma tabela; no exemplo, o cargo de todos os funcionrios. A ordem das colunas no importante durante o armazenamento de dados; especifique essa ordem quando os dados forem recuperados. 4. Uma coluna que contm o nmero do departamento, que tambm uma chave estrangeira. Uma chave estrangeira uma coluna que define como as tabelas se relacionam umas com as outras. Uma chave estrangeira se refere a uma chave primria ou a uma chave exclusiva em outra tabela. No exemplo, DEPTNO identifica com exclusividade um departamento da tabela DEPT.
Introduo ao Oracle: SQL e PL/SQL I-13

Terminologia de Banco de Dados Relacional (continuao) 5. possvel encontrar um campo na interseo entre uma linha e uma coluna. S pode haver um valor nesse campo. 6. Um campo pode no conter nenhum valor. Nesse caso, o valor nulo. Na tabela EMP, apenas funcionrios com cargo de vendedor tm um valor no campo COMM (comisso). Observao: Os valores nulos so abordados com mais detalhes nas lies posteriores.

Introduo ao Oracle: SQL e PL/SQL I-14

Relacionando Vrias Tabelas


Cada linha de dados de uma tabela identificada com exclusividade por uma chave primria (PK). Voc pode relacionar logicamente dados de vrias tabelas usando as chaves estrangeiras (FK).
Nome da Tabela: EMP
EMPNO 7839 7698 7782 7566 ENAME KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER DEPTNO 10 30 10 20

Nome da Tabela: DEPT


DEPTNO 10 20 30 40 DNAME ACCOUNTING RESEARCH SALES OPERATIONS LOC NEW YORK DALLAS CHICAGO BOSTON

Chave primria
I-15

Chave estrangeira

Chave primria

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Relacionando Vrias Tabelas Cada tabela contm dados que descrevem exatamente uma entidade. Por exemplo, a tabela EMP contm informaes sobre funcionrios. As categorias de dados so listadas ao longo da parte superior de cada tabela e os casos individuais so listados abaixo da tabela. Usando o formato de tabela, voc pode visualizar, entender e usar informaes imediatamente. Como os dados sobre entidades diferentes so armazenados em tabelas diferentes, talvez voc precise combinar duas ou mais tabelas para responder a uma pergunta especfica. Por exemplo, talvez voc queira saber a localizao do departamento no qual um funcionrio trabalha. Nesse cenrio, voc precisa de informaes da tabela EMP (que contm dados sobre funcionrios) e da tabela DEPT (que contm informaes sobre departamentos). Um RDBMS permite relacionar os dados de uma tabela aos dados de outra usando as chaves estrangeiras. Uma chave estrangeira uma coluna ou um conjunto de colunas que se refere a uma chave primria na mesma tabela ou em outra tabela. O recurso de relacionar dados de uma tabela a dados de outra permite organizar informaes em unidades gerenciveis separadas. possvel manter logicamente os dados dos funcionrios separados dos dados dos departamentos armazenando-os em uma tabela separada.

Introduo ao Oracle: SQL e PL/SQL I-15

Diretrizes para Chaves Primrias e Estrangeiras No so permitidos valores duplicados em uma chave primria. Geralmente, no possvel alterar chaves primrias. As chaves estrangeiras so baseadas nos valores dos dados e so ponteiros unicamente lgicos e no fsicos. Uma chave estrangeira deve corresponder a um valor de chave primria existente, a um valor de chave exclusiva ou ser nula. No possvel definir chaves estrangeiras sem chaves primrias (exclusivas) existentes.

Introduo ao Oracle: SQL e PL/SQL I-16

Propriedades de Banco de Dados Relacional


Um banco de dados relacional Pode ser acessado e modificado executando instrues SQL (Structured Query Language) Contm um conjunto de tabelas sem ponteiros fsicos Usa um conjunto de operadores

I-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Propriedades de Banco de Dados Relacional Em um banco de dados relacional, voc no especifica a rota de acesso s tabelas e no precisa saber como os dados so organizados fisicamente. Para acessar o banco de dados, execute uma instruo SQL (Structured Query Language), que a linguagem padro ANSI (American National Standards Institute) para a operao em bancos de dados relacionais. A linguagem contm um grande conjunto de operadores para dividir e combinar relaes. possvel modificar o banco de dados usando as instrues SQL.

Introduo ao Oracle: SQL e PL/SQL I-17

Comunicando-se com um RDBMS Usando o SQL


A instruo SQL informada
SQL> SELECT loc 2 FROM dept;

A instruo enviada para o banco de dados

Banco de Dados Os dados so exibidos


LOC ------------NEW YORK DALLAS CHICAGO BOSTON

I-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

SQL (Structured Query Language) O SQL permite comunicar-se com o servidor e tem as seguintes vantagens: Eficincia Facilidade de aprendizagem e uso Funcionalidade completa (O SQL permite definir, recuperar e manipular dados das tabelas.)

Introduo ao Oracle: SQL e PL/SQL I-18

Sistema de Gerenciamento de Banco de Dados Relacional


Servidor

Tabelas de usurios
I-19 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Dicionrio de dados

Sistema de Gerenciamento de Banco de Dados Relacional A Oracle fornece um RDBMS flexvel chamado Oracle7. Usando os recursos desse RDBMS, voc pode armazenar e gerenciar dados com todas as vantagens de uma estrutura relacional alm do PL/SQL, um mecanismo com recurso para armazenar e executar unidades de programas. O servidor oferece as opes de recuperao de dados com base em tcnicas de otimizao. Ele inclui recursos de segurana que controlam como um banco de dados acessado e usado. Outros recursos incluem a consistncia e a proteo de dados atravs de mecanismos de bloqueio. As aplicaes Oracle podem ser executadas no mesmo computador que o Oracle Server. Como opo, voc pode executar aplicaes em um sistema local de usurio e executar o Oracle Server em outro sistema (arquitetura cliente-servidor). Nesse ambiente cliente-servidor, possvel usar uma grande variedade de recursos de computao. Por exemplo, uma aplicao de reservas de uma linha area baseada em forms pode ser executada no PC de um cliente, enquanto o acesso a dados de vo gerenciado convenientemente por um Oracle Server em um computador central. Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8.

Introduo ao Oracle: SQL e PL/SQL I-19

Oracle8: Sistema de Gerenciamento de Banco de Dados Relacional de Objeto


Objetos e tipos de dados definidos pelo usurio Compatibilidade total com o banco de dados relacional Suporte de objetos grandes e multimdia Recursos de servidor de banco de dados de alta qualidade

I-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sobre o Oracle8 O Oracle8 o primeiro banco de dados com recurso de objeto desenvolvido pela Oracle. Ele estende os recursos de modelo de dados do Oracle7 para suportar um novo modelo de banco de dados relacional de objeto. O Oracle8 fornece um novo mecanismo que oferece programao orientada a objeto, tipos de dados complexos, objetos comerciais complexos e compatibilidade total com o universo relacional. O Oracle8 estende o Oracle7 de vrias formas. Ele inclui vrios recursos para desempenho e funcionalidade aperfeioados de aplicaes OLTP (Online Transaction Processing), como um melhor compartilhamento de estruturas de dados no tempo de execuo, caches de buffer maiores e restries diferenciveis. As aplicaes de armazenamento de dados se beneficiaro de aperfeioamentos como a execuo paralela de operaes para inserir, atualizar e deletar, a diviso e a otimizao de consultas paralelas. Operando na estrutura NCA (Network Computing Architecture), o Oracle8 suporta aplicaes cliente-servidor e baseadas da Web distribudas e com vrias camadas. O Oracle8 pode escalonar dezenas de milhares de usurios simultneos, suportar 512 petabytes e tratar qualquer tipo de dados, incluindo dados espaciais, de textos, imagens, som, vdeo e sries de tempos, alm de dados estruturados tradicionais. Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8.

Introduo ao Oracle: SQL e PL/SQL I-20

Oracle8i: Banco de Dados de Plataforma Internet para Recursos de Computao na Internet


Ferramentas avanadas para gerenciar todos os tipos de dados em sites da Web Mais que um simples armazenamento de dados relacional: iFS Java VM integrado no servidor: JServer Melhor desempenho, segurana mais firme, aperfeioamento de linguagem Maior integrao com o ambiente Windows NT: AppWizard
I-21 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sobre o Oracle8i O Oracle8i, o banco de dados de computao na Internet, fornece ferramentas avanadas para gerenciar todos os tipos de dados em sites da Web. Ele muito mais que um simples armazenamento de dados relacionais. O iFS (Internet File System) combina a potncia do Oracle8i com a facilidade de uso de um sistema de arquivos. Ele permite que os usurios movam todos os dados para o banco de dados do Oracle8i, no qual eles podem ser armazenados e gerenciados com mais eficincia. Os usurios finais podem acessar facilmente arquivos e pastas no Oracle iFS atravs de vrios protocolos, como HTML, FTP e IMAP4, que fornecem acesso universal aos dados. O Oracle8i interMedia permite que os usurios tornem seus dados multimdia acessveis Web, incluindo dados de imagens, textos, udio e vdeo. O Oracle8i inclui um Java Virtual Machine robusto, integrado e escalonvel no servidor (Jserver), que suporta Java em todas as camadas de aplicaes. Esse recurso elimina a necessidade de recompilar ou modificar um cdigo Java quando for preciso depur-lo em uma camada diferente. Como o gerenciamento de recursos recentemente introduzido, o DBA pode escolher o melhor mtodo para adequar ao perfil e carga de trabalho de uma aplicao. Os recursos estendidos de servidor paralelo e rede melhoram a facilidade de administrao do sistema. A funcionalidade estendida da duplicao avanada resulta em um melhor desempenho e segurana aperfeioada. Foram adicionados recursos novos e importantes a linguagens.

Introduo ao Oracle: SQL e PL/SQL I-21

Sobre o Oracle8i (continuao) O Oracle8i fornece integrao nativa total com o Microsoft Transaction Server (MTS) no ambiente Windows NT. O desenvolvimento de aplicaes simplificado pelo Oracle Application Wizard (AppWizard) para Visual Studio, que fornece aos desenvolvedores uma ferramenta de GUI para criar uma aplicao Visual C++, Visual Interdev ou Visual Basic acessando dados em um banco de dados do Oracle. Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8i.

Introduo ao Oracle: SQL e PL/SQL I-22

Plataforma Internet da Oracle


Clientes
Qualquer navegador Qualquer cliente de correio Qualquer cliente FTP

Gerenciamento de sistema

Aplicaes para Internet

Ferramentas de desenvolvimento

SQL

Lgica comercial e dados

Apresentao e lgica comercial

PL/SQL

Bancos de dados

Servidores de aplicaes

Java

Servios de rede
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

I-23

Plataforma Internet da Oracle A Oracle oferece uma plataforma Internet abrangente e de alto desempenho para comrcio eletrnico e armazenamento de dados. Essa plataforma integrada inclui tudo o que necessrio para desenvolver, depurar e gerenciar aplicaes para Internet. A Plataforma Internet da Oracle criada em trs partes principais: Clientes baseados em navegadores para processar apresentaes Servidores de aplicaes para executar a lgica comercial e a lgica de apresentao de servidor aos clientes baseados em navegadores Bancos de dados para executar a lgica comercial com uso intensivo do banco de dados e dos dados do servidor

A Oracle oferece vrias ferramentas de desenvolvimento orientadas a GUI (Graphical User Interface) mais avanadas para criar aplicaes comerciais, alm de um grande conjunto de aplicaes de software para vrias reas de comrcio e indstria. possvel criar procedimentos de armazenamento, funes e pacotes usando SQL, PL/SQL ou Java.

Introduo ao Oracle: SQL e PL/SQL I-23

Instrues SQL
SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT GRANT REVOKE
I-24

Recuperao de dados

DML (Data Manipulation Language)

DDL (Data Definition Language)

Controle de transao

DCL (Data Control Language)

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Instrues SQL O Oracle SQL compatvel com os padres aceitos pela indstria. A Oracle Corporation garante a compatibilidade futura com padres em desenvolvimento envolvendo ativamente uma equipe-chave nos comits de padres SQL. Os comits aceitos pela indstria so o ANSI (American National Standards Institute) e o ISO (International Standards Organization). O ANSI e o ISO aceitaram o SQL como a linguagem padro para os bancos de dados relacionais.
Instruo SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT GRANT REVOKE Descrio Recupera dados do banco de dados Informa novas linhas, altera linhas existentes e remove linhas indesejveis de tabelas do banco de dados, respectivamente. O conjunto dessas instrues conhecido como DML (Data Manipulation Language). Configura, altera e remove estruturas de dados de tabelas. O conjunto dessas instrues conhecido como DDL (Data Definition Language).

Gerencia as alteraes feitas pelas instrues DML. possvel agrupar as alteraes dos dados em transaes lgicas. Fornece ou remove direitos de acesso ao banco de dados Oracle e s estruturas contidas nele. O conjunto dessas instrues conhecido como DCL (Data Control Language).

Introduo ao Oracle: SQL e PL/SQL I-24

Sobre PL/SQL
O PL/SQL uma extenso do SQL com recursos de design de linguagens de programao. As instrues de consulta e a manipulao de dados do SQL esto includas nas unidades procedurais de cdigo.

I-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sobre PL/SQL O PL/SQL (Procedural Language/SQL) uma extenso de linguagem procedural da Oracle Corporation para SQL, a linguagem de acesso a dados padro para bancos de dados relacionais. O PL/SQL oferece recursos de engenharia de software modernos, como, por exemplo, a encapsulao de dados, o tratamento de excees, a ocultao de informaes, a orientao de objeto e assim por diante, trazendo os recursos de programao mais modernos para o Oracle Server e o Toolset. O PL/SQL incorpora muitos recursos avanados feitos em linguagens de programao projetadas durante as dcadas de 70 e 80. Alm de aceitar a manipulao de dados, ele tambm permite que instrues de consulta do SQL sejam includas em unidades procedurais de cdigo e estruturadas em blocos, tornando o PL/SQL uma linguagem de processamento de transaes poderosa. Com o PL/SQL, voc pode usar as instrues SQL para refinar os dados da Oracle e as instrues de controle do PL/SQL para processar os dados.

Introduo ao Oracle: SQL e PL/SQL I-25

Ambiente PL/SQL
Mecanismo PL/SQL bloco PL/SQL bloco PL/SQL PL/SQL SQL Executor da Instruo Procedural

Executor da Instruo SQL Oracle Server

I-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Mecanismo PL/SQL e Oracle Server O PL/SQL no um produto Oracle em si; ele uma tecnologia empregada pelo Oracle Server e por algumas ferramentas Oracle. Os blocos PL/SQL so passados e processados por um mecanismo PL/SQL, que pode residir na ferramenta ou no Oracle Server. O mecanismo usado depende do local no qual o PL/SQL chamado. O mecanismo PL/SQL no Oracle Server processa os blocos PL/SQL submetidos de um programa de sada de usurio, Pro*, SQL*Plus ou Server Manager. Ele separa as instrues SQL e as envia individualmente para o executor da instruo SQL. Uma nica transferncia necessria para enviar o bloco da aplicao para o Oracle Server, melhorando o desempenho, especialmente em uma rede cliente-servidor. Tambm possvel armazenar o PL/SQL no Oracle Server sob a forma de subprogramas que podem ser consultados pelas aplicaes conectadas ao banco de dados.

Introduo ao Oracle: SQL e PL/SQL I-26

Tabelas Usadas no Curso


EMP
EMPNO --------7839 7698 7782 7566 7654 7499 7844 7900 DEPTNO --------10 ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES JOB MGR HIREDATE SAL COMM DEPTNO --------- --------- --------- --------- --------- --------PRESIDENT 17-NOV-81 5000 10 MANAGER 7839 01-MAY-81 2850 30 MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK SALESMAN LOC ANALYST ---------CLERK NEW YORK ANALYST DALLAS CLERK CHICAGO CLERK BOSTON 7839 7839 7698 7698 7698 7698 7698 7566 7902 7566 7788 7782 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82 2450 2975 1250 1600 1500 950 10 20 30 30 30 30

1400 300 0

7521 WARD DNAME 7902 FORD -------------7369 SMITH ACCOUNTING 20 7788 SCOTT RESEARCH 30 7876 ADAMS SALES 40 7934 MILLER OPERATIONS

1250 500 30 3000 20 800 20 GRADE LOSAL HISAL 3000 20 --------- --------- --------1100 1 20 700 1200 1300 2 10 1201 1400 3 1401 2000 4 5 2001 3001 3000 9999

DEPT

SALGRADE
I-27 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Tabelas Usadas no Curso As trs tabelas a seguir sero usadas neste curso: Tabela EMP, que fornece detalhes sobre todos os funcionrios Tabela DEPT, que fornece detalhes sobre todos os departamentos Tabela SALGRADE, que fornece detalhes sobre salrios de vrias classes

A estrutura e os dados de todas as tabelas so fornecidos no Apndice B.

Introduo ao Oracle: SQL e PL/SQL I-27

Sumrio
Os bancos de dados relacionais so compostos por relaes, gerenciados por operaes relacionais e regidos por restries de integridade de dados. O Oracle Server permite armazenar e gerenciar informaes usando a linguagem SQL e o mecanismo PL/SQL. O Oracle8 baseado no ORDBMS (object relational database management system). O Oracle8i Server o banco de dados de computao na Internet. O PL/SQL uma extenso do SQL com recursos de design de linguagens de programao.
I-28 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio Os RDBMSs (relational database management systems) so compostos por objetos ou relaes. Eles so gerenciados por operaes e regidos por restries de integridade de dados. A Oracle Corporation cria produtos e servios para atender suas necessidades de RDBMS. O produto principal o Oracle Server, que permite armazenar e gerenciar informaes usando o SQL e o mecanismo PL/SQL para construes procedurais. SQL O Oracle Server suporta o SQL do padro ANSI e contm extenses. O SQL uma linguagem usada para comunicar-se com o servidor e acessar, manipular e controlar dados. PL/SQL A linguagem PL/SQL estende a linguagem SQL oferecendo construes procedurais estruturados em blocos combinados com recursos no procedurais do SQL.

Introduo ao Oracle: SQL e PL/SQL I-28

1
Criando Instrues SQL Bsicas

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Listar os recursos das instrues SELECT SQL Executar uma instruo SELECT bsica Diferenciar instrues SQL e comandos SQL*Plus

1-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Para extrair dados do banco de dados, preciso usar a instruo SELECT SQL (Structured Query Language). Talvez voc necessite restringir as colunas exibidas. Esta lio descreve todas as instrues SQL necessrias para executar essas aes. Talvez voc deseje criar instrues SELECT que possam ser usadas continuamente. Esta lio tambm aborda o uso dos comandos SQL*Plus para executar instrues SQL.

Introduo ao Oracle: SQL e PL/SQL 1-2

Recursos das Instrues SELECT SQL


Seleo Projeo

Tabela 1

Tabela 1

Juno

Tabela 1
1-3

Tabela 2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Recursos das Instrues SELECT SQL A instruo SELECT recupera informaes do banco de dados. Usando uma instruo SELECT, voc pode fazer o seguinte: Seleo: Voc pode usar o recurso de seleo no cdigo SQL para escolher as linhas de uma tabela que deseja ver retornadas por uma consulta. Pode usar vrios critrios para restringir seletivamente as linhas que voc v. Projeo: Voc pode usar o recurso de projeo no cdigo SQL para escolher as colunas de uma tabela que deseja ver retornadas por uma consulta. possvel escolher mais ou menos colunas da tabela conforme sua necessidade. Juno: Voc pode usar o recurso de juno no cdigo SQL para reunir dados armazenados em tabelas diferentes, criando um vnculo entre eles. Voc aprender mais sobre junes em uma lio posterior.

Introduo ao Oracle: SQL e PL/SQL 1-3

Instruo SELECT Bsica

SELECT FROM

[DISTINCT] {*, coluna [apelido],...} tabela;

SELECT identifica que colunas. FROM identifica qual tabela.

1-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Instruo SELECT Bsica Da forma mais simples, uma instruo SELECT deve incluir o seguinte: Uma clusula SELECT, que especifica as colunas a serem exibidas Uma clusula FROM, que especifica a tabela que contm as colunas listadas na clusula SELECT SELECT DISTINCT * coluna apelido FROM tabela uma lista de uma ou mais colunas suprime os itens duplicados seleciona todas as colunas seleciona a coluna nomeada fornece cabealhos diferentes s colunas selecionadas especifica a tabela contendo as colunas

Na sintaxe:

Observao: Em todo o curso so usados os termos palavra-chave, clusula e instruo. Uma palavra-chave refere-se a um elemento SQL individual. Por exemplo, SELECT e FROM so palavras-chave. Uma clusula parte de uma instruo SQL. Por exemplo, SELECT empno, ename, ... uma clusula. Uma instruo uma combinao de duas ou mais clusulas. Por exemplo, SELECT * FROM emp uma instruo SQL.
Introduo ao Oracle: SQL e PL/SQL 1-4

Criando Instrues SQL


Instrues SQL sem distino entre maisculas e minsculas. Instrues SQL podem estar em uma ou mais linhas. Palavras-chave no podem ser abreviadas ou dividas entre as linhas. Normalmente, as clusulas so colocadas em linhas separadas. Guias e endentaes so usadas para aperfeioar a legibilidade.
1-5 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando Instrues SQL Usando as seguintes diretrizes e regras simples, voc pode construir instrues vlidas fceis de ler e editar: As instrues SQL no fazem distino entre maisculas de minsculas, a menos que indicado. As instrues SQL podem ser digitadas em uma ou mais linhas. As palavras-chave no podem ser divididas entre as linhas nem abreviadas. As clusulas so em geral colocadas em linhas separadas para melhor legibilidade e facilidade de edio. As guias e endentaes podem ser usadas para tornar o cdigo mais legvel. Em geral, as palavras-chave so digitadas em letras maisculas, todas as outras palavras, como nomes de tabela e colunas so digitadas em minsculas. Dentro do SQL*Plus, uma instruo SQL digitada no prompt SQL e as linhas subseqentes so numeradas. Isso chama-se buffer de SQL. Somente uma instruo pode ser a atual a qualquer momento dentro do buffer. Coloque um ponto-e-vrgula (;) no final da ltima clusula. Coloque uma barra na ltima linha do buffer. Coloque uma barra no prompt SQL. Emita um comando RUN do SQL*Plus no prompt SQL.
Introduo ao Oracle: SQL e PL/SQL 1-5

Executando Instrues SQL

Selecionando Todas as Colunas


SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

1-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Selecting All Columns, All Rows Exiba todas as colunas de dados em uma tabela seguindo a palavra-chave SELECT com um asterisco (*). No exemplo do slide, a tabela do departamento contm trs colunas: DEPTNO, DNAME e LOC. A tabela contm quatro linhas, uma para cada departamento. possvel, tambm, exibir todas as colunas na tabela, listando todas elas aps a palavra-chave SELECT. Por exemplo, a instruo SQL a seguir, como no exemplo do slide, exibe todas as colunas e linhas da tabela DEPT:
SQL> SELECT deptno, dname, loc 2 FROM dept;

Introduo ao Oracle: SQL e PL/SQL 1-6

Selecionando Colunas Especficas


SQL> SELECT deptno, loc 2 FROM dept;

DEPTNO --------10 20 30 40

LOC ------------NEW YORK DALLAS CHICAGO BOSTON

1-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Selecionando Colunas Especficas, Todas as Linhas Voc pode usar a instruo SELECT para exibir colunas especficas da tabela, ao especificar os nomes da coluna, separado por vrgulas. O exemplo do slide exibe todos os nmeros dos departamentos e locais na tabela DEPT. Na clusula SELECT, especifique as colunas a serem vistas, na ordem que deseja que apaream na sada. Por exemplo, para exibir o local antes do nmero do departamento, use a seguinte instruo:
SQL> SELECT loc, deptno 2 FROM dept; LOC DEPTNO ------------- --------NEW YORK 10 DALLAS 20 CHICAGO 30 BOSTON 40

Introduo ao Oracle: SQL e PL/SQL 1-7

Defaults de Cabealho de Coluna

Justificativa default
Esquerda: Dados de caractere e data Direita: Dados numricos

Exibio default: Letra maiscula

1-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Defaults de Cabealho de Coluna Os dados e o cabealho da coluna de caracteres bem como os dados e o cabealho da coluna de data so justificados esquerda na largura da coluna. Os cabealhos de nmero e dados so justificados direita. SQL> SELECT ename, hiredate, sal 2 FROM emp;
ENAME HIREDATE SAL ---------- --------- --------KING 17-NOV-81 5000 BLAKE 01-MAY-81 2850 CLARK 09-JUN-81 2450 JONES 02-APR-81 2975 MARTIN 28-SEP-81 1250 ALLEN 20-FEB-81 1600 ... 14 rows selected.

Os cabealhos da coluna de caracteres e datas podem ser truncados, mas os cabealhos de nmeros, no. Os cabealhos de coluna aparecem por default em letra minscula. Voc pode sobrepor a exibio do cabealho de coluna com um apelido. Os apelidos de coluna so abordados posteriormente nesta lio.
Introduo ao Oracle: SQL e PL/SQL 1-8

Expresses Aritmticas
Criar expresses com dados NUMBER e DATE usando operadores aritmticos.
Operador + * / Descrio Adicionar Subtrair Multiplicar Dividir

1-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Expresses Aritmticas Talvez voc necessite modificar a forma de exibio dos dados, efetuar clculos ou consultar cenrios what-if. Isso possvel usando expresses aritmticas. Uma expresso aritmtica possui nomes de coluna, valores numricos constantes e operadores aritmticos. Operadores Aritmticos O slide lista os operadores aritmticos disponveis no cdigo SQL. Voc pode usar operadores aritmticos em qualquer clusula de uma instruo SQL exceto na clusula FROM.

Introduo ao Oracle: SQL e PL/SQL 1-9

Usando Operadores Aritmticos


SQL> SELECT ename, sal, sal+300 2 FROM emp; ENAME SAL SAL+300 ---------- --------- --------KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 ... 14 rows selected.

1-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Operadores Aritmticos O exemplo no slide usa o operador de adio para calcular um aumento de salrio de US$300 para todos os funcionrios e exibe uma nova coluna SAL+300 na sada. Observe que a coluna SAL+300 resultante do clculo no uma nova coluna na tabela EMP; ela somente para exibio. Por default, o nome de uma coluna surge do clculo que a criou nesse caso, sal+300. Observao: O SQL*Plus ignora espaos em branco antes e depois do operador aritmtico.

Introduo ao Oracle: SQL e PL/SQL 1-10

Precedncia do Operador

A multiplicao e a diviso tm prioridade sobre a adio e a subtrao. Os operadores com a mesma prioridade so avaliados da esquerda para a direita. Os parnteses so usados para forar a avaliao priorizada e para esclarecer as instrues.

1-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Precedncia do Operador Se uma expresso aritmtica tiver mais de um operador, a multiplicao e a diviso sero avaliadas primeiro. Se os operadores dentro uma expresso tiverem a mesma prioridade, ento a avaliao ser realizada da esquerda para a direita. Voc pode usar os parnteses a fim de forar a avaliao da expresso entre parnteses primeiro.

Introduo ao Oracle: SQL e PL/SQL 1-11

Precedncia do Operador
SQL> SELECT ename, sal, 12*sal+100 2 FROM emp; ENAME SAL 12*SAL+100 ---------- --------- ---------KING 5000 60100 BLAKE 2850 34300 CLARK 2450 29500 JONES 2975 35800 MARTIN 1250 15100 ALLEN 1600 19300 ... 14 rows selected.

1-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Precedncia do Operador (continuao) O exemplo no slide exibe o nome, o salrio e a remunerao anual dos funcionrios. Ele calcula a remunerao anual como 12 multiplicado pelo salrio mensal, mais um bnus de US$100. Observe que a multiplicao realizada antes da adio. Observao: Use os parnteses para reforar a ordem de procedncia padro e aumentar a compreenso. Por exemplo, a expresso acima pode ser criada como (12*sal)+100 sem que haja alterao no resultado.

Introduo ao Oracle: SQL e PL/SQL 1-12

Usando Parnteses
SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp; ENAME SAL 12*(SAL+100) ---------- --------- ----------KING 5000 61200 BLAKE 2850 35400 CLARK 2450 30600 JONES 2975 36900 MARTIN 1250 16200 ... 14 rows selected.

1-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Parnteses Voc pode sobrepor as normas de precedncia usando parnteses para especificar a ordem de execuo dos operadores. O exemplo no slide exibe o nome, o salrio e a remunerao anual dos funcionrios. Ele calcula a remunerao anual como o salrio mensal mais um bnus mensal de US$100, multiplicado por 12. Por causa dos parmetros, a adio tem prioridade sobre a multiplicao.

Introduo ao Oracle: SQL e PL/SQL 1-13

Definindo um Valor Nulo


Um valor nulo no est disponvel, no atribudo, desconhecido ou no aplicvel. Um valor nulo no o mesmo que um zero ou um espao em branco.
SQL> SELECT ename, job, sal, comm 2 FROM emp; ENAME JOB SAL COMM ---------- --------- --------- --------KING PRESIDENT 5000 BLAKE MANAGER 2850 ... TURNER SALESMAN 1500 0 ... 14 rows selected.
1-14 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Valores Nulos Se faltar o valor de dados em uma linha de uma determinada coluna, diz-se que esse valor nulo ou contm nulo. Um valor nulo no est disponvel, no atribudo, desconhecido ou no aplicvel. Um valor nulo no o mesmo que um zero ou um espao. O zero um nmero e o espao um caractere. As colunas de qualquer tipo de dados podem conter valores nulos, a menos que tenham sido definidas como NOT NULL ou como PRIMARY KEY ao serem criadas. Na coluna COMM da tabela EMP, note que somente o SALESMAN pode ganhar comisso. Outros funcionrios no esto autorizados a ganhar comisso. Um valor nulo representa esse fato. Turner, que um vendedor, no ganha nenhuma comisso. Observe que sua comisso zero e no nula.

Introduo ao Oracle: SQL e PL/SQL 1-14

Valores Nulos nas Expresses Aritmticas


Expresses aritmticas contendo um valor nulo avaliado como nulo.
SQL> select ename, 12*sal+comm 2 from emp 3 WHERE ename='KING'; ENAME 12*SAL+COMM ---------- ----------KING

1-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Valores Nulos (continuao) Se qualquer valor da coluna em uma expresso aritmtica for nulo, o resultado ser nulo. Por exemplo, se voc tentar executar uma diviso com zero, obter um erro. No entanto, se dividir um nmero por nulo, o resultado ser nulo ou desconhecido. No exemplo do slide, o funcionrio KING no est em SALESMAN e no receber nenhuma comisso. Como a coluna COMM na expresso aritmtica nula, o resultado ser nulo. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "Elements of SQL".

Introduo ao Oracle: SQL e PL/SQL 1-15

Definindo um Apelido de Coluna


Renomeia um cabealho de coluna til para clculos Segue imediatamente o nome da coluna; palavra-chave AS opcional entre o nome da coluna e o apelido Necessita de aspas duplas caso contenha espaos ou caracteres especiais ou faa distino entre maisculas e minsculas

1-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Apelidos de Coluna Ao exibir o resultado de uma consulta, o SQL*Plus normalmente usa o nome da coluna selecionada como o cabealho da mesma. Em muitos casos, esse cabealho pode no ser descritivo e, desse modo, de difcil compreenso. possvel alterar um cabealho de coluna usando um apelido da coluna. Especifique o apelido aps a coluna na lista SELECT usando um espao como um separador. Por default, os cabealhos de apelidos aparecem em letras maisculas. Se o apelido possuir espaos, caracteres especiais (tais como # ou $) ou fizer distino entre maisculas e minsculas, coloque o apelido entre aspas duplas (" ").

Introduo ao Oracle: SQL e PL/SQL 1-16

Usando Apelidos de Coluna


SQL> SELECT ename AS name, sal salary 2 FROM emp; NAME SALARY ------------- --------... SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp; Name Annual Salary ------------- ------------...
1-17 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Apelidos de Coluna (continuao) O primeiro exemplo exibe o nome e o salrio mensal de todos os funcionrios. Note que a palavrachave AS opcional foi usada antes do nome do apelido de coluna. O resultado da consulta dever ser o mesmo caso a palavra-chave AS seja usada ou no. Note tambm que a instruo SQL possui os apelidos de coluna, nome e salrio, em letra minscula, enquanto o resultado da consulta exibe os cabealhos da coluna em maiscula. Conforme mencionado no ltimo slide, os cabealhos de coluna aparecem, por default, em maiscula. O segundo exemplo exibe o nome e o salrio anual de todos os funcionrios. Como o Annual Salary possui espaos, ele foi includo entre aspas duplas. Note que o cabealho da coluna na sada exatamente o mesmo do apelido da coluna.

Introduo ao Oracle: SQL e PL/SQL 1-17

Operador de Concatenao
Concatena colunas ou strings de caractere a outras colunas representado por duas barras verticais (||) Cria uma coluna resultante que uma expresso de caracteres

1-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Operador de Concatenao Voc pode vincular colunas outras colunas, expresses aritmticas ou valores constantes usando o operador de concatenao (||). As colunas em cada lado do operador so combinadas para formar uma coluna de sada nica.

Introduo ao Oracle: SQL e PL/SQL 1-18

Usando um Operador de Concatenao


SQL> SELECT 2 FROM ename||job AS "Employees" emp;

Employees ------------------KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER MARTINSALESMAN ALLENSALESMAN ... 14 rows selected.

1-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Operador de Concatenao (continuao) No exemplo, ENAME e JOB esto concatenados e recebem o apelido Employees. Note que o nmero e cargo do funcionrio so combinados para formar uma coluna de sada nica. A palavra-chave AS antes do nome do apelido torna a clusula SELECT mais fcil de ser lida.

Introduo ao Oracle: SQL e PL/SQL 1-19

Strings Literais de Caracteres


Uma literal um caractere, um nmero ou uma data includa na lista SELECT. Os valores literais de caractere e data devem estar entre aspas simples. Cada string de caractere gerada uma vez para cada linha retornada.

1-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Strings Literais de Caracteres Uma literal um caractere, um nmero ou uma data includa na lista SELECT que no seja um nome ou apelido de coluna. Ela impressa para cada linha retornada. Strings literais de formato de texto livre podem ser includas no resultado da consulta e so tratadas da mesma forma que uma coluna na lista SELECT. As literais de caractere e data precisam estar entre aspas simples (' '); as literais de nmero, no.

Introduo ao Oracle: SQL e PL/SQL 1-20

Usando Strings Literais de Caracteres


SQL> SELECT ename ||' is a '||job 2 AS "Employee Details" 3 FROM emp; Employee Details ------------------------KING is a PRESIDENT BLAKE is a MANAGER CLARK is a MANAGER JONES is a MANAGER MARTIN is a SALESMAN ... 14 rows selected.

1-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Strings Literais de Caracteres (continuao) O exemplo do slide exibe os nomes e cargos de todos os funcionrios. A coluna possui o cabealho Employee Details. Note os espaos entre as aspas simples na instruo SELECT. Os espaos melhoram a legibilidade da sada. No exemplo a seguir, o nome e o salrio de cada funcionrio esto concatenados a uma literal para dar mais sentido s linhas retornadas.
SQL> SELECT ename ||': '||'1'||' Month salary = '||sal Monthly 2 FROM emp; MONTHLY --------------------------------------------------------------KING: 1 Month salary = 5000 BLAKE: 1 Month salary = 2850 CLARK: 1 Month salary = 2450 JONES: 1 Month salary = 2975 MARTIN: 1 Month salary = 1250 ALLEN: 1 Month salary = 1600 TURNER: 1 Month salary = 1500 ... 14 rows selected.
Introduo ao Oracle: SQL e PL/SQL 1-21

Linhas Duplicadas
A exibio default das consultas de todas as linhas, incluindo linhas duplicadas.
SQL> SELECT deptno 2 FROM emp;

DEPTNO --------10 30 10 20 ... 14 rows selected.

1-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Linhas Duplicadas Exceto se indicado o contrrio, o SQL*Plus exibe os resultados de uma consulta sem eliminar as linhas duplicadas. O exemplo do slide exibe todos os nmeros de departamento a partir da tabela EMP. Note que os nmeros de departamento esto repetidos.

Introduo ao Oracle: SQL e PL/SQL 1-22

Eliminando Linhas Duplicadas


Elimine linhas duplicadas usando a palavrachave DISTINCT na clusula SELECT.
SQL> SELECT DISTINCT deptno 2 FROM emp;

DEPTNO --------10 20 30

1-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Linhas Duplicadas (continuao) Para eliminar linhas duplicadas de um resultado, inclua a palavra-chave DISTINCT na clusula SELECT logo aps a palavra-chave SELECT. No exemplo do slide, a tabela EMP contm, na verdade, quatorze linhas, mas h somente trs nmeros de departamento exclusivos na tabela. Voc pode especificar vrias colunas aps o qualificador DISTINCT. O qualificador DISTINCT afeta todas as colunas selecionadas e o resultado representa uma combinao distinta das colunas.
SQL> SELECT DISTINCT deptno, job 2 FROM emp; DEPTNO -----10 10 10 20 ... 9 rows JOB --------CLERK MANAGER PRESIDENT ANALYST selected.

Introduo ao Oracle: SQL e PL/SQL 1-23

Interao SQL e SQL*Plus


Instrues SQL

Buffer

Instrues SQL

Servidor

SQL*Plus

Comandos do SQL*Plus Relatrio Formatado

Resultados da Consulta

1-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

SQL e SQL*Plus SQL uma linguagem de comando para comunicao com o Oracle Server a partir de qualquer ferramenta ou aplicao. O Oracle SQL possui muitas extenses. Quando voc informa uma instruo SQL, ela armazenada em uma parte da memria chamada buffer de SQL e permanece l at que voc informe uma nova instruo. O SQL*Plus uma ferramenta Oracle que reconhece e submete instrues SQL ao Oracle Server para execuo e contm sua prpria linguagem de comando. Recursos do Cdigo SQL Podem ser utilizados por uma grande faixa de usurios, incluindo aqueles com pouca ou nenhuma experincia em programao uma linguagem no procedural Reduz o perodo de tempo necessrio para a criao e manuteno de sistemas uma linguagem similar ao ingls Recursos do SQL*Plus Aceita entrada ad hoc das instrues Aceita entrada SQL a partir dos arquivos Oferece um editor de linha para modificar instrues SQL Controla as configuraes ambientais Formata os resultados da consulta em um relatrio bsico Acessa bancos de dados remotos e locais
Introduo ao Oracle: SQL e PL/SQL 1-24

Instrues SQL Versus Comandos SQL*Plus


SQL Uma linguagem Padro ANSI A palavra-chave no pode ser abreviada As instrues manipulam definies de dados e tabela no banco de dados SQL*Plus Um ambiente Patenteado pela Oracle As palavras-chave podem ser abreviadas Os comandos no permitem a manipulao dos valores no banco de dados

Instrues SQL

Buffer de SQL

Comandos SQL*Plus

Buffer de SQL*Plus

1-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

SQL e SQL*Plus (continuao) A tabela a seguir compara os cdigos SQL e SQL*Plus:


SQL uma linguagem de comunicao com o Oracle Server para acesso aos dados. baseada no padro SQL da American National Standards Institute (ANSI). Manipula definies de dados e tabela no banco de dados. Digita-se no buffer de SQL em uma ou mais linhas. No possui caractere de continuao. possvel abreviar. Usa um caracter de finalizao para executar o comando imediatamente. Usa funes para executar algumas formataes. SQL*Plus Reconhece instrues SQL e as envia ao Servidor. a interface patenteada da Oracle para execuo de instrues SQL. No permite a manipulao dos valores no banco de dados. Digita-se uma linha de cada vez; no armazenada no buffer de SQL. Possui um hfen (-) como caractere de continuao caso os comandos ultrapassem uma linha. No possvel abreviar. No necessita de caracteres de finalizao; os comandos so executados imediatamente. Usa comandos para formatar dados.

Introduo ao Oracle: SQL e PL/SQL 1-25

Viso Geral do SQL*Plus


Estabelecer login no SQL*Plus. Descrever a estrutura de tabela. Editar a instruo SQL. Executar o cdigo SQL a partir do SQL*Plus. Salvar as instrues SQL em arquivos e anexar as instrues SQL a arquivos. Executar arquivos salvos. Carregar comandos a partir de arquivo para buffer e edit-los.
1-26 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

SQL*Plus SQL*Plus um ambiente no qual voc pode realizar o seguinte: Executar instrues SQL para recuperar, modificar, adicionar e remover dados do banco de dados. Formatar, calcular, armazenar e imprimir resultados de consulta em formulrios. Criar arquivos de script para armazenar instrues SQL para uso repetitivo no futuro.
Objetivo Afeta o comportamento geral das instrues SQL para a seo. Formata o resultado da consulta. Salva, carrega e executa arquivos de script. Envia instrues SQL do buffer de SQL para o Oracle8 Server. Modifica as instrues SQL no buffer. Permite criar e passar variveis para instrues SQL, imprimir valores de variveis e imprimir mensagens na tela. Possui diversos comandos para conectar o banco de dados, manipular o ambiente SQL*Plus e exibir definies de coluna.

Os comandos SQL*Plus podem ser divididos nas seguintes categorias principais:


Categoria Ambiente Formato Manipulao de arquivo Execuo Editar Interao Diversos

Introduo ao Oracle: SQL e PL/SQL 1-26

Estabelecendo Login no SQL*Plus


No ambiente Windows:

Na linha de comando: sqlplus [nome do usurio[/senha [@banco de dados]]]


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

Estabelecendo Login no SQL*Plus A forma de chamar o SQL*Plus depende do tipo de sistema operacional ou ambiente Windows que voc est executando. Para estabelecer login atravs de um ambiente Windows: 1. Clique em Iniciar > Programas > Oracle for Windows NT > SQL*Plus 8.0. 2. Preencha o nome do usurio, a senha e o banco de dados. Para estabelecer login atravs de um ambiente de linha de comando: 1. Estabelea login na mquina. 2. Digite o comando SQL*Plus conforme mostrado no slide. No comando: nome do usurio senha o seu nome de usurio do banco de dados a sua senha do banco de dados (se digitar sua senha aqui, ela estar visvel)

@banco de dados a string de conexo do banco de dados Observao: Para garantir a integridade da senha, no a digite no prompt do sistema operacional. Em vez disso, digite somente o nome de usurio. Digite a senha no prompt Password. Uma vez estabelecido o login corretamente no SQL*Plus, voc ver a seguinte mensagem:
SQL*Plus Release 8.0.3.0.0 - Produzido em Ter Jun 22 16:03:43 1999 (c) Copyright 1999 Oracle Corporation. (Release 8.0.3.0.0 - Production on Tue Jun 22 16:03:43 1999 (c) Copyright 1999 Oracle Corporation. Todos os direitos reservados. (All rights reserved). Introduo ao Oracle: SQL e PL/SQL 1-27

Exibindo a Estrutura de Tabela

Use o comando DESCRIBE do SQL*Plus para exibir a estrutura de uma tabela.


DESC[RIBE] nome da tabela

1-28

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exibindo a Estrutura de Tabela No SQL*Plus, possvel exibir a estrutura de uma tabela usando o comando DESCRIBE. O resultado do comando para ver os nomes da coluna e tipos de dados, assim como se uma coluna deve conter dados. Na sintaxe: nome da tabela o nome de qualquer tabela, view ou sinnimo existente disponvel para o usurio

Introduo ao Oracle: SQL e PL/SQL 1-28

Exibindo a Estrutura de Tabela

SQL> DESCRIBE dept Name Null? ----------------- -------DEPTNO NOT NULL DNAME LOC Type -----------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

1-29

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exibindo a Estrutura de Tabela (continuao) O exemplo do slide exibe as informaes sobre a estrutura da tabela DEPT. No resultado: Null? Type
Tipo de dado NUMBER(p,s) VARCHAR2(s) DATE CHAR(s)

indica se uma coluna deve conter dados; NOT NULL indica que uma coluna deve conter dados exibe o tipo de dados de uma coluna
Descrio Valor numrico que possui um nmero mximo de dgitos p, o nmero de dgitos direita do ponto decimal s. Valor de caracteres com comprimento varivel do tamanho mximo s. Valor de data e hora entre 1 de janeiro, 4712 A.C. e 31 de dezembro, 9999 D.C. Valores de caracteres com comprimento fixo do tamanho s.

Os tipos de dados so descritos na tabela a seguir:

Introduo ao Oracle: SQL e PL/SQL 1-29

Comandos de Edio do SQL*Plus


A[PPEND] texto C[HANGE] / antigo / novo C[HANGE] / texto / CL[EAR] BUFF[ER] DEL DEL n DEL m n

1-30

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Comandos de Edio do SQL*Plus Os comandos SQL*Plus so digitados em uma linha de cada vez e no so armazenados no buffer de SQL.
Comando A[PPEND] texto C[HANGE] / antigo / novo C[HANGE] / texto / CL[EAR] BUFF[ER] DEL Descrio Adiciona texto no final da linha atual. Altera o texto antigo para o novo na linha atual. Deleta o texto da linha atual. Deleta todas as linhas a partir do buffer de SQL. Deleta a linha atual.

Diretrizes Ao pressionar [Return] antes de completar o comando, o SQL*Plus informa o nmero da linha incompleta. Finalize o buffer de SQL digitando um dos caracteres finalizadores (ponto-e-vrgula ou barra) ou pressionando duas vezes [Return]. Em seguida, aparecer o prompt SQL.

Introduo ao Oracle: SQL e PL/SQL 1-30

Comandos de Edio do SQL*Plus


I[NPUT] I[NPUT] texto L[IST] L[IST] n L[IST] m n R[UN]

n n texto
0 texto
1-31 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Comandos de Edio do SQL*Plus (continuao)


Comando I[NPUT] I[NPUT] texto L[IST] L[IST] n L[IST] m n R[UN] n n texto 0 texto Descrio Insere um nmero indefinido de linhas. Insere uma linha consistindo em texto. Lista todas as linhas no buffer de SQL. Lista uma linha (especificada pelo n). Lista uma faixa de linhas (de m a n). Exibe e executa a instruo SQL atual no buffer. Especifica a linha que deve ser tornar a linha atual. Substitui a linha n pelo texto. Insere uma linha antes da linha 1.

Voc pode digitar somente um comando SQL*Plus por prompt SQL. Os comandos SQL*Plus no ficam armazenados no buffer. Para continuar um comando SQL*Plus na prxima linha, finalize a linha atual com um hfen (-).

Introduo ao Oracle: SQL e PL/SQL 1-31

Comandos 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
1-32 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Comandos de Arquivo do SQL*Plus As instrues SQL comunicam-se com o Oracle Server. Os comandos SQL*Plus controlam o ambiente, formatam os resultados de consulta e gerenciam arquivos. Voc pode usar os comandos identificados na tabela a seguir:
Comando SAV[E] nome de arquivo [.ext] [REP[LACE]APP[END]] Descrio Salva o contudo atual do buffer de SQL para um arquivo. Use APPEND para adicionar um arquivo existente; use REPLACE para substituir um arquivo existente. A extenso default .sql. Salva o contedo de um arquivo salvo anteriormente para o buffer de SQL. A extenso default para o nome de arquivo .sql. Executa um arquivo de comando salvo anteriormente. Executa um arquivo de comando salvo anteriormente (o mesmo que START). Chama o editor e salva o contedo do buffer para um arquivo chamado afiedt.buf. Chama o editor para editar o contedo de um arquivo salvo. Armazena os resultados da consulta em um arquivo. OFF fecha o arquivo perifrico. OUT fecha o arquivo perifrico e envia o os resultados do arquivo para a impressora do sistema. Sai do cdigo SQL*Plus.

GET nome de arquivo [.ext]

STA[RT] nome de arquivo [.ext] @ nome de arquivo ED[IT] ED[IT] [nome de arquivo [.ext]] SPO[OL] [nome de arquivo ext]| OFF|OUT] EXIT

Introduo ao Oracle: SQL e PL/SQL 1-32

Sumrio

SELECT FROM

[DISTINCT] {*,coluna [apelido],...} tabela;

Use o SQL*Plus como um ambiente para: Executar instrues SQL Editar instrues SQL

1-33

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Instruo SELECT Nesta lio, voc aprendeu sobre a recuperao de dados de uma tabela de banco de dados com a instruo SELECT.
SELECT FROM
onde:

[DISTINCT] {*,coluna [apelido],...} tabela;


SELECT DISTINCT * coluna apelido FROM tabela uma lista de pelo menos uma coluna. suprime as duplicatas. seleciona todas as colunas. seleciona a coluna nomeada. d um cabealho diferente coluna selecionada. especifica a tabela contendo as colunas.

SQL*Plus SQL*Plus um ambiente de execuo que pode ser usado para enviar instrues SQL ao servidor do banco de dados, editar e salvar as instrues SQL. As instrues podem ser executadas a partir do prompt SQL ou de um arquivo de script.

Introduo ao Oracle: SQL e PL/SQL 1-33

Viso Geral do Exerccio


Selecionando todos os dados a partir de tabelas diferentes Descrevendo a estrutura de tabelas Executando clculos aritmticos e especificando nomes de coluna Usando o editor do SQL*Plus

1-34

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Esse o primeiro de muitos exerccios. As solues (caso necessite delas) podem ser encontradas no Anexo A. Os exerccios tm a inteno de apresentar todos os tpicos abordados nesta lio. As questes 2 a 4 so impressas. Em qualquer exerccio, pode haver questes do tipo "se voc tiver tempo" ou "se quiser mais desafios". Faa-as somente se tiver concludo todas as outras questes dentro do tempo alocado e desejar mais desafios s suas habilidades. Realize o exerccio devagar e com exatido. possvel exercitar-se salvando e executando arquivos de comando. Se tiver qualquer pergunta, chame o instrutor. Questes Impressas Para as questes de 2 a 4, marque Falso ou Verdadeiro.

Introduo ao Oracle: SQL e PL/SQL 1-34

Exerccio 1 1. Inicie uma sesso SQL*Plus usando um ID e uma senha de usurio fornecidos pelo instrutor. 2. Os comandos SQL*Plus acessam o banco de dados. Verdadeiro/Falso 3. A instruo SELECT ser executada corretamente? Verdadeiro/Falso
SQL> SELECT 2 FROM ename, job, sal Salary emp;

4. A instruo SELECT ser executada corretamente? Verdadeiro/Falso


SQL> SELECT 2 FROM * salgrade;

5. H quatro erros de codificao nesta instruo. Voc pode identific-los?


SQL> SELECT 2 3 FROM empno, ename salary x 12 ANNUAL SALARY emp;

6. Mostre a estrutura da tabela DEPT. Selecione todos os dados da tabela DEPT.


Name DEPTNO DNAME LOC DEPTNO -----10 20 30 40 Null? NOT NULL Type -----------NUMBER(2) VARCHAR2(14) VARCHAR2(13) LOC ------------NEW YORK DALLAS CHICAGO BOSTON

----------- --------

DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS

Introduo ao Oracle: SQL e PL/SQL 1-35

Exerccio 1 (continuao) 7. Mostre a estrutura da tabela EMP. Crie uma consulta para exibir o nome, o cargo, a data de admisso e o nmero do funcionrio para cada funcionrio, com o nmero do funcionrio aparecendo primeiro. Salve a instruo SQL em um arquivo nomeado plq7.sql.
Name Null? --------- -------EMPNO NOT NULL ENAME JOB MGR HIREDATE SAL COMM DEPTNO NOT NULL Type ------------NUMBER(4) VARCHAR2(10) VARCHAR2(9) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2)

8. Execute a consulta no arquivo p1q7.sql.


EMPNO ENAME JOB HIREDATE ----- ------- ----------- --------7839 KING PRESIDENT 7698 BLAKE MANAGER 7782 CLARK MANAGER 7566 JONES MANAGER 7654 MARTIN SALESMAN 7499 ALLEN SALESMAN 7844 TURNER SALESMAN 7900 JAMES CLERK 7521 WARD SALESMAN 7902 FORD ANALYST 7369 SMITH CLERK 7788 SCOTT ANALYST 7876 ADAMS CLERK 7934 MILLER CLERK 14 rows selected. 17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82

Introduo ao Oracle: SQL e PL/SQL 1-36

Exerccio 1 (continuao) 9. Crie uma consulta para exibir os cargos exclusivos a partir da tabela EMP.
JOB ----------ANALYST CLERK MANAGER PRESIDENT SALESMAN

Se voc tiver tempo, complete os exerccios abaixo: 10. Carregue o p1q7.sql no buffer de SQL. Nomeie os cabealhos das colunas como Emp #, Employee, Job, e Hire Date, respectivamente. Execute novamente a consulta.
Emp # Employee Job Hire Date --------------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82

----- --------- ---------7839 KING PRESIDENT 7698 BLAKE MANAGER 7782 CLARK MANAGER 7566 JONES MANAGER 7654 MARTIN SALESMAN 7499 ALLEN SALESMAN 7844 TURNER SALESMAN 7900 JAMES CLERK 7521 WARD SALESMAN 7902 FORD ANALYST 7369 SMITH CLERK 7788 SCOTT ANALYST 7876 ADAMS CLERK 7934 MILLER CLERK 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 1-37

Exerccio 1 (continuao) 11. Exiba o nome concatenado com o cargo (job), separado por uma vrgula e espao, e nomeie a coluna Employee and Title.
Employee and Title ------------------KING, PRESIDENT BLAKE, MANAGER CLARK, MANAGER JONES, MANAGER MARTIN, SALESMAN ALLEN, SALESMAN TURNER, SALESMAN JAMES, CLERK WARD, SALESMAN FORD, ANALYST SMITH, CLERK SCOTT, ANALYST ADAMS, CLERK MILLER, CLERK 14 rows selected.

Se voc quiser mais desafios, complete o exerccio abaixo: 12. Crie uma consulta para exibir todos os dados a partir da tabela EMP. Separe cada coluna por uma vrgula. Nomeie a coluna como THE_OUTPUT.
THE_OUTPUT ------------------------------------------------7839,KING,PRESIDENT,,17-NOV-81,5000,,10 7698,BLAKE,MANAGER,7839,01-MAY-81,2850,,30 7782,CLARK,MANAGER,7839,09-JUN-81,2450,,10 7566,JONES,MANAGER,7839,02-APR-81,2975,,20 7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,1400,30 7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30 7844,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30 7900,JAMES,CLERK,7698,03-DEC-81,950,,30 7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30 7902,FORD,ANALYST,7566,03-DEC-81,3000,,20 7369,SMITH,CLERK,7902,17-DEC-80,800,,20 7788,SCOTT,ANALYST,7566,09-DEC-82,3000,,20 7876,ADAMS,CLERK,7788,12-JAN-83,1100,,20 7934,MILLER,CLERK,7782,23-JAN-82,1300,,10 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 1-38

2
Restringindo e Classificando Dados

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos

Depois de completar esta lio, voc poder fazer o seguinte: Limitar linhas recuperadas por uma consulta Classificar linhas recuperadas por uma consulta

2-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Ao recuperar dados do banco de dados, pode ser preciso restringir as linhas de dados exibidas ou especificar a ordem de exibio das mesmas. Essa lio explica as instrues SQL que voc utiliza para executar essas aes.

Introduo ao Oracle: SQL e PL/SQL 2-2

Limitando Linhas Usando uma Seleo


EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 10 20

"recuperar todos os funcionrios do departamento 10"

EMP EMPNO ENAME JOB ... DEPTNO 10 10 10

7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

2-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Limitando Linhas Usando uma Seleo No exemplo do slide, suponha que voc deseje exibir todos os funcionrios do departamento 10. O conjunto de linhas realadas com um valor 10 na coluna DEPTNO so as nicas retornadas. Esse mtodo de restrio a base da clusula WHERE na linguagem SQL.

Introduo ao Oracle: SQL e PL/SQL 2-3

Limitando Linhas Selecionadas


Restringe as linhas retornadas usando a clusula WHERE.
SELECT FROM [WHERE [DISTINCT] {*| coluna [apelido], ...} tabela condio(es)];

A clusula WHERE segue a clusula FROM.

2-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Limitando Linhas Selecionadas possvel restringir as linhas retornadas da consulta utilizando a clusula WHERE. Uma clusula WHERE contm uma condio que deve coincidir e seguir diretamente a clusula FROM. Na sintaxe: WHERE condio restringe a consulta s linhas que atendem uma condio. composta por nomes de colunas, expresses, constantes e um operador de comparao.

A clusula WHERE pode comparar valores em colunas, valores literais, expresses aritmticas ou funes. A clusula WHERE formada por trs elementos: Nome de coluna Operadores de comparao Nome da coluna, constante ou lista de valores

Introduo ao Oracle: SQL e PL/SQL 2-4

Usando a Clusula WHERE


SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK'; ENAME ---------JAMES SMITH ADAMS MILLER JOB DEPTNO --------- --------CLERK 30 CLERK 20 CLERK 20 CLERK 10

2-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando a Clusula WHERE No exemplo, a instruo SELECT recupera o nome, o cargo e o nmero do departamento de todos os funcionrios cujo cargo CLERK. Observe que o cargo CLERK foi especificado em letras maisculas para garantir que a correspondncia seja feita com a coluna do cargo na tabela EMP. As strings de caractere no fazem distino entre maisculas de minsculas.

Introduo ao Oracle: SQL e PL/SQL 2-5

Strings de Caractere e Datas


As strings de caractere e valores de data aparecem entre aspas simples. Os valores de caractere fazem distino entre maisculas e minsculas e os valores de data diferenciam formatos. O formato de data default DD-MON-YY.
SQL> SELECT 2 FROM 3 WHERE ename, job, deptno emp ename = 'JAMES' ;

2-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Strings de Caractere e Datas Strings de caractere e datas na clusula WHERE devem estar entre aspas simples (''). Constantes de nmero, no entanto, no precisam. Todas as pesquisas de caractere fazem distino entre maisculas de minsculas. No exemplo a seguir, nenhuma linha retornou pois a tabela EMP armazena todas as datas em letras maisculas:
SQL> SELECT ename, empno, job, deptno 2 FROM emp 3 WHERE job='clerk';

Os produtos da Oracle armazenam datas em um formato numrico interno, representando o sculo, ano, ms, dia, horas, minutos e segundos. A exibio da data default DD-MON-YY. Observao: A alterao do formato da data default ser abordada na lio subseqente. Valores de nmero no aparecem entre aspas.

Introduo ao Oracle: SQL e PL/SQL 2-6

Operadores de Comparao
Operador = > >= < <= <> Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de

2-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Operadores de Comparao Usa-se os operadores de comparao em condies que comparam uma expresso a outra. Eles so usados na clusula WHERE no seguinte formato: Sintaxe
WHERE expr valor operador

Exemplos
WHERE hiredate='01-JAN-95' WHERE sal>=1500 WHERE ename='SMITH'

Introduo ao Oracle: SQL e PL/SQL 2-7

Usando Operadores de Comparao


SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm;

ENAME SAL COMM ---------- --------- --------MARTIN 1250 1400

2-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Operadores de Comparao No exemplo, a instruo SELECT recupera o nome, salrio e comisso da tabela EMP, em que o salrio do funcionrio menor ou igual quantia da comisso. Observe que no h valor explcito fornecido para a clusula WHERE. Os dois valores que esto sendo comparados so retirados das colunas SAL e COMM na tabela EMP.

Introduo ao Oracle: SQL e PL/SQL 2-8

Outros Operadores de Comparao


Operador BETWEEN ...AND... IN(list) Significado Entre dois valores (inclusive)

Vincula qualquer um de uma lista de valores Vincula um padro de caractere um valor nulo

LIKE IS NULL

2-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Introduo ao Oracle: SQL e PL/SQL 2-9

Usando o Operador BETWEEN


Use o operador BETWEEN para exibir linhas baseadas em uma faixa de valores.
SQL> SELECT 2 FROM 3 WHERE ename, sal emp sal BETWEEN 1000 AND 1500;

ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300

Limite inferior

Limite superior

2-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador BETWEEN Voc pode exibir linhas baseadas em uma faixa de valores usando o operador BETWEEN. A faixa que voc especificar possuir uma faixa inferior e uma superior. A instruo SELECT no slide retorna as linhas da tabela EMP para qualquer funcionrio cujo salrio esteja entre US$1.000 e US$1.500. Valores especificados com o operador BETWEEN so inclusivos. Voc deve especificar primeiro o limite inferior.

Introduo ao Oracle: SQL e PL/SQL 2-10

Usando o Operador IN
Use o operador IN para testar os valores de uma lista.
SQL> SELECT 2 FROM 3 WHERE EMPNO --------7902 7369 7788 7876 empno, ename, sal, mgr emp mgr IN (7902, 7566, 7788);

ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788

2-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador IN Para testar os valores em uma determinada lista, use o operador IN. O exemplo do slide exibe o nmero do funcionrio, o nome, o salrio e o nmero de funcionrio do gerente de todos os funcionrios cujo nmero de funcionrio do gerente for 7902, 7566 ou 7788. O operador IN pode ser usado com qualquer tipo de dados. O exemplo seguinte retorna uma linha da tabela EMP para qualquer funcionrio cujo nome estiver includo na lista de nomes na clusula WHERE:
SQL> SELECT 2 FROM 3 WHERE empno, ename, mgr, deptno emp ename IN ('FORD' , 'ALLEN');

Se forem utilizados caracteres ou datas na lista, eles devem estar entre aspas simples ('').

Introduo ao Oracle: SQL e PL/SQL 2-11

Usando o Operador LIKE


Use o operador LIKE para executar pesquisas curinga de valores de string de pesquisa vlidos. As condies de pesquisa podem conter caracteres literais ou nmeros.
% denota zero ou muitos caracteres. _ denota um caractere.
SQL> SELECT 2 FROM 3 WHERE ename emp ename LIKE 'S%';

2-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador LIKE Talvez nem sempre voc saiba o valor exato pelo qual procurar. possvel selecionar linhas que vinculem um padro de caractere usando o operador LIKE. A operao de vinculao de um padro de caractere refere-se a uma pesquisa de curinga. Dois smbolos podem ser utilizados para construir a string de pesquisa.
Smbolo % _ Descrio Representa qualquer seqncia de zero ou mais caracteres. Representa qualquer caractere nico.

A instruo SELECT acima retorna o nome do funcionrio da tabela EMP para qualquer funcionrio cujo nome comea com "S". Note o "S". maisculo. Os nomes iniciados com "s" no retornaro. O operador LIKE pode ser usado como um atalho para algumas comparaes BETWEEN. O exemplo a seguir exibe os nomes as datas de admisso de todos os funcionrios admitidos entre janeiro e dezembro de 1981:
SQL> 2 3 SELECT FROM WHERE ename, hiredate emp hiredate LIKE '%1981';

Introduo ao Oracle: SQL e PL/SQL 2-12

Usando o Operador LIKE


Voc pode combinar caracteres de vinculao de padro.
SQL> SELECT 2 FROM 3 WHERE ENAME ---------MARTIN JAMES WARD ename emp ename LIKE '_A%';

possvel usar o identificador ESCAPE para procurar por "%" ou "_".


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

Combinando Caracteres Curinga Os smbolos % e _ podem ser usados em qualquer combinao com caracteres literais. O exemplo do slide exibe os nomes de todos os funcionrios cujos nomes possuem a letra "A" como segundo caractere. A Opo ESCAPE Quando for necessrio ter uma correspondncia exata para os caracteres '%' e '_' reais, use a opo ESCAPE. Essa opo especifica qual o caractere ESCAPE. Caso possua HEAD_QUARTERS como um nome de departamento, deve procurar por ele utilizando a seguinte instruo SQL:
SQL> SELECT * FROM dept 2 WHERE dname LIKE '%\_%' ESCAPE '\'; DEPTNO DNAME LOC --------- -------------- ------------50 HEAD_QUARTERS ATLANTA

A opo ESCAPE identifica a barra invertida (\) como o caractere de escape. No padro, o caractere de escape vem antes do sublinhado (_). Isso faz com que o Oracle Server interprete o sublinhado literalmente.

Introduo ao Oracle: SQL e PL/SQL 2-13

Usando o Operador IS NULL


Teste para valores nulos com o operador IS NULL.
SQL> SELECT 2 FROM 3 WHERE ename, mgr emp mgr IS NULL;

ENAME MGR ---------- --------KING

2-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador IS NULL O operador IS NULL testa valores que so nulos. Um valor nulo significa que o valor no est disponvel, no-atribudo, desconhecido ou no-aplicvel. Assim, no possvel testar com (=) porque um valor nulo no pode ser igual ou desigual a qualquer valor. O exemplo do slide recupera o nome e o gerente de todos os funcionrios que no possuem um gerente. Por exemplo, para exibir o nome, o cargo e a comisso de todos os funcionrios que no esto nomeados para obter uma comisso, use a seguinte instruo SQL:
SQL> SELECT 2 FROM 3 WHERE ENAME -------KING BLAKE CLARK ... ename, job, comm emp comm IS NULL;

JOB COMM ----------- -----PRESIDENT MANAGER MANAGER

Introduo ao Oracle: SQL e PL/SQL 2-14

Operadores Lgicos

Operador AND OR

Significado Retorna TRUE se as condies de componentes forem TRUE Retorna TRUE se cada condio de componente for TRUE Retorna TRUE se a condio seguinte for FALSE

NOT

2-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Operadores Lgicos Um operador lgico combina o resultado de duas condies de componente para produzir um nico resultado com base neles ou inverter o resultado para uma condio nica. Trs operadores lgicos esto disponveis no SQL: AND OR NOT

Todos os exemplos at aqui especificaram somente uma condio na clusula WHERE. Voc pode usar vrias condies em uma clusula WHERE usando operadores AND e OR.

Introduo ao Oracle: SQL e PL/SQL 2-15

Usando o Operador AND


AND exige que ambas as condies sejam TRUE.
SQL> 2 3 4 SELECT FROM WHERE AND empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------CLERK 1100 CLERK 1300

EMPNO --------7876 7934

ENAME ---------ADAMS MILLER

2-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador AND No exemplo, as duas condies devem ser verdadeiras para cada registro a ser selecionado. Assim, um funcionrio que possua o cargo CLERK e receba mais de US$1.100 ser selecionado. Todas as pesquisas de caractere fazem distino entre maisculas de minsculas. Nenhuma linha retornar se CLERK no estiver em letra maiscula. As strings de caractere devem estar entre aspas. Tabela de Verdade AND A tabela a seguir mostra os resultados da combinao de duas expresses com AND:
AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL

Introduo ao Oracle: SQL e PL/SQL 2-16

Usando o Operador OR
OR exige que cada condio seja TRUE.
SQL> 2 3 4 SELECT FROM WHERE OR empno, ename, job, sal emp sal>=1100 job='CLERK'; JOB SAL --------- --------PRESIDENT 5000 MANAGER 2850 MANAGER 2450 MANAGER 2975 SALESMAN 1250 CLERK 950

EMPNO ENAME --------- ---------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN ... 7900 JAMES ... 14 rows selected.
2-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador OR No exemplo, cada condio pode ser verdadeira para qualquer registro a ser selecionado. Assim, um funcionrio que possua o cargo CLERK ou que receba mais de US$1.100 ser selecionado. A Tabela de Verdade OR A tabela a seguir mostra os resultados da combinao de duas expresses com OR:
OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL

Introduo ao Oracle: SQL e PL/SQL 2-17

Usando o Operador NOT


SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME ---------KING MARTIN ALLEN TURNER WARD

JOB --------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN

2-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Operador NOT O exemplo do slide exibe o nome e o cargo de todos os funcionrios que no possuem os cargos CLERK, MANAGER ou ANALYST. A Tabela de Verdade NOT A tabela a seguir mostra o resultado da aplicao do operador NOT para uma condio:
NOT TRUE TRUE FALSE FALSE TRUE NULL NULL

Observao: O operador NOT pode ser utilizado tambm com outros operadores SQL, como BETWEEN, LIKE e NULL.
... ... ... ... WHERE WHERE WHERE WHERE job sal ename comm NOT NOT NOT IS IN ('CLERK', 'ANALYST') BETWEEN 1000 AND 1500 LIKE '%A%' NOT NULL

Introduo ao Oracle: SQL e PL/SQL 2-18

Regras de Precedncia
Ordem de Avaliao 1 2 3 4 Operador Todos os operadores de comparao NOT AND OR

Sobreponha regras de precedncia usando parnteses.

2-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Introduo ao Oracle: SQL e PL/SQL 2-19

Regras de Precedncia
SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp job='SALESMAN' job='PRESIDENT' sal>1500; JOB SAL --------- --------PRESIDENT 5000 SALESMAN 1250 SALESMAN 1600 SALESMAN 1500 SALESMAN 1250

ENAME ---------KING MARTIN ALLEN TURNER WARD

2-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exemplo de Precedncia do Operador AND No exemplo do slide, h duas condies: A primeira condio que o cargo seja PRESIDENT e o salrio maior que 1500. A segunda condio que o cargo seja SALESMAN.

Portanto, a instruo SELECT faz a leitura do seguinte modo: "Selecione a linha se o funcionrio for um PRESIDENT e receber mais que US$1.500 ou se o funcionrio for um SALESMAN".

Introduo ao Oracle: SQL e PL/SQL 2-20

Regras de Precedncia
Use parnteses para forar a prioridade.
SQL> 2 3 4 5 SELECT FROM WHERE OR AND ename, job, sal emp (job='SALESMAN' job='PRESIDENT') sal>1500;

ENAME ---------KING ALLEN

JOB SAL --------- --------PRESIDENT 5000 SALESMAN 1600

2-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Parnteses No exemplo, h duas condies: A primeira condio que o cargo seja PRESIDENT ou SALESMAN. A segunda que o salrio sejam maior que 1500.

Portanto, a instruo SELECT faz a leitura do seguinte modo: "Selecione a linha se um funcionrio for um PRESIDENT ou um SALESMAN e se o funcionrio receber mais de US$1500".

Introduo ao Oracle: SQL e PL/SQL 2-21

Clusula ORDER BY
Classificar as linhas com a clusula ORDER BY ASC: ordem crescente, default DESC: ordem decrescente A clusula ORDER BY vem depois na instruo SELECT.
SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 ... 14 rows selected.
2-22 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula ORDER BY A ordem das linhas retornadas em um resultado de consulta indefinida. A clusula ORDER BY pode ser utilizada para classificar as linhas. Se voc usar a clusula ORDER BY, deve coloc-la por ltimo. possvel especificar uma expresso ou um apelido para classificao. Sintaxe
SELECT FROM [WHERE [ORDER BY

expr tabela condio(es)]


{coluna, expr} [ASC|DESC]];

onde:

ORDER BY ASC DESC

especifica a ordem em que as linhas recuperadas so exibidas ordena as linhas na ordem crescente (essa a ordem default) ordena as linhas na ordem decrescente

Se a clusula ORDER BY no for usada, a ordem de classificao ser indefinida e o Oracle Server talvez no extraia as linhas na mesma ordem ao realizar a mesma consulta duas vezes. Use a clusula ORDER BY para exibir as linhas em uma ordem especfica.

Introduo ao Oracle: SQL e PL/SQL 2-22

Classificando em Ordem Decrescente


SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate DESC; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------ADAMS CLERK 20 12-JAN-83 SCOTT ANALYST 20 09-DEC-82 MILLER CLERK 10 23-JAN-82 JAMES CLERK 30 03-DEC-81 FORD ANALYST 20 03-DEC-81 KING PRESIDENT 10 17-NOV-81 MARTIN SALESMAN 30 28-SEP-81 ... 14 rows selected.
2-23 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Ordenao de Dados Default A ordem de classificao default crescente: Valores numricos so exibidos primeiro com os valores mais baixos por exemplo, 1999. Valores de datas so exibidos primeiro com os valores mais recentes por exemplo, 01-JAN-92 antes de 01-JAN-95. Valores de caracteres so exibidos em ordem alfabtica por exemplo, o A primeiro e o Z por ltimo. Os valores nulos so exibidos por ltimo em seqncias ascendentes e primeiro em seqncias descendentes.

Invertendo a Ordem Default Para inverter a ordem de exibio das linhas, especifique a palavra-chave DESC aps o nome da coluna na clusula ORDER BY. O exemplo do slide classifica o resultado pelo funcionrio contratado mais recentemente.

Introduo ao Oracle: SQL e PL/SQL 2-23

Classificando por Apelido de Coluna


SQL> SELECT empno, ename, sal*12 annsal 2 FROM emp 3 ORDER BY annsal; EMPNO ENAME ANNSAL --------- ---------- --------7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 7521 WARD 15000 7934 MILLER 15600 7844 TURNER 18000 ... 14 rows selected.

2-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Classificando por Apelidos de Coluna Voc pode usar um apelido de coluna na clusula ORDER BY. O exemplo do slide classifica os dados por salrio anual.

Introduo ao Oracle: SQL e PL/SQL 2-24

Classificando por Vrias Colunas


A ordem da lista ORDER BY a ordem de classificao.
SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC; ENAME DEPTNO SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.

Voc pode classificar por uma coluna que no esteja na lista SELECT.
2-25 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Classificando por Vrias Colunas Voc pode classificar os resultados da consulta por mais de uma coluna. O limite de classificao o nmero de colunas de uma determinada tabela. Na clusula ORDER BY, especifique as colunas e separe seus nomes usando vrgulas. Se deseja inverter a ordem de uma coluna, especifique DESC aps seu nome. possvel ordenar por colunas que no esto includas na clusula SELECT. Exemplo Exiba o nome e o salrio de todos os funcionrios. Ordene o resultado por nmero de departamento e, em seguida, em ordem decrescente de salrio.
SQL> SELECT 2 FROM 3 ORDER BY ename, sal emp deptno, sal DESC;

Introduo ao Oracle: SQL e PL/SQL 2-25

Sumrio

SELECT FROM [WHERE [ORDER BY

[DISTINCT] {*| coluna [apelido], ...} tabela condio(es)] {coluna, expr, apelido} [ASC|DESC]];

2-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio Nesta lio, voc aprendeu sobre a restrio e classificao de colunas retornadas pela instruo SELECT. Tambm aprendeu como implementar vrios operadores.

Introduo ao Oracle: SQL e PL/SQL 2-26

Viso Geral do Exerccio

Selecionando dados e alterando a ordem das linhas exibidas Restringindo colunas utilizando a clusula WHERE Usando as aspas nos apelidos de colunas

2-27

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Esta seo oferece uma variedade de exerccios usando a clusula WHERE e a clusula ORDER BY.

Introduo ao Oracle: SQL e PL/SQL 2-27

Exerccio 2 1. Crie uma consulta para exibir o nome e o salrio dos funcionrios que recebem mais de US$2.850. Salve a instruo SQL em um arquivo p2q1.sql. Execute a consulta.
ENAME -------KING JONES FORD SCOTT SAL ---5000 2975 3000 3000

2. Crie uma consulta para exibir o nome do funcionrio e o nmero do departamento para o nmero do funcionrio 7566.
ENAME DEPTNO ------ -----JONES 20

3. Modifique o arquivo p2q1.sql para exibir o nome e o salrio de todos os funcionrios cujos salrios no estejam na faixa entre US$1.500 e US$2.850. Salve novamente a instruo SQL em um arquivo nomeado p2q3.sql. Execute novamente a consulta.
ENAME SAL ------- ----KING 5000 JONES 2975 MARTIN 1250 JAMES 950 WARD 1250 FORD 3000 SMITH 800 SCOTT 3000 ADAMS 1100 MILLER 1300 10 rows selected.

Introduo ao Oracle: SQL e PL/SQL 2-28

Exerccio 2 (continuao) 4. Exiba o nome do funcionrio, o cargo e a data de admisso dos funcionrios admitidos entre 20 de fevereiro de 1981 e 1 de maio de 1981. Ordene a consulta de modo crescente pela data inicial.
ENAME ------ALLEN WARD JONES BLAKE JOB --------SALESMAN SALESMAN MANAGER MANAGER HIREDATE ---------------20-FEB-81 22-FEB-81 02-APR-81 01-MAY-81

5. Exiba o nome do funcionrio e o nmero do departamento de todos os funcionrios entre os departamentos 10 e 30 por ordem alfabtica de nome.
ENAME DEPTNO -------- -----ALLEN 30 BLAKE 30 CLARK 10 JAMES 30 JONES 10 MARTIN 30 MILLER 10 TURNER 30 WARD 30 9 rows selected.

6. Modifique o p2q3.sql para listar o nome e o salrio dos funcionrios que recebem mais de US$1.500 e que esto nos departamentos 10 ou 30. Nomeie as colunas Employee e Monthly Salary, respectivamente. Salve novamente a instruo SQL em um arquivo p2q6.sql. Execute novamente a consulta..
Employee -------KING BLAKE CLARK ALLEN Monthly Salary -------------5000 2850 2450 1600

Introduo ao Oracle: SQL e PL/SQL 2-29

Exerccio 2 (continuao) 7. Exiba o nome e a data de admisso de cada funcionrio admitido em 1982.
ENAME -----SCOTT MILLER HIREDATE --------09-DEC-82 23-JAN-82

8. Exiba o nome e o cargo de todos os funcionrios que no possuem um gerente.


ENAME JOB ----- --------KING PRESIDENT

9. Exiba o nome, o salrio e a comisso de todos os funcionrios que recebem comisso. Classifique os dados em ordem decrescente de salrios e comisses.
ENAME ------ALLEN TURNER MARTIN WARD SAL ---1600 1500 1250 1250 COMM ---300 0 1400 500

Se voc tiver tempo, complete os exerccios abaixo: 10. Exiba os nomes de todos os funcionrios que possuem um A na terceira letra de seus nomes.
ENAME ----------BLAKE CLARK ADAMS

11. Exiba todos os funcionrios que possuem duas letras L em seus nomes e esto no departamento 30 ou seu gerente seja o 7782.
ENAME ---------ALLEN MILLER

Introduo ao Oracle: SQL e PL/SQL 2-30

Exerccio 2 (continuao) Se voc quiser mais desafios, complete os exerccios abaixo: 12. Exiba o nome, o cargo e o salrio de todos os funcionrios cujos cargos seja Clerk ou Analyst e que seus salrios no sejam iguais a US$1.000, US$3.000 ou US$5.000.
ENAME -----JAMES SMITH ADAMS MILLER JOB SAL ------- ----CLERK 950 CLERK 800 CLERK 1100 CLERK 1300

13. Modifique o p2q6.sql para exibir o nome, o salrio e a comisso de todos os funcionrios cuja quantia de comisso seja maior que seus salrios com 10% de aumento. Execute novamente a consulta. Salve novamente a consulta como p2q13.sql.
Employee Monthly Salary COMM ---------- --------------- ----MARTIN 1250 1400

Introduo ao Oracle: SQL e PL/SQL 2-31

Introduo ao Oracle: SQL e PL/SQL 2-32

3
Funes de Uma nica Linha

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever vrios tipos de funes disponveis no SQL Usar funes de data, nmero e caractere nas instrues SELECT Descrever o uso das funes de converso

3-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio As funes formam o bloco de consulta bsico mais avanado e so usadas para manipular valores de dados. Esta a primeira de duas lies a explorar funes. Sero abordadas as funes de caractere de uma nica linha, de nmero e de datas, bem como aquelas funes que convertem dados de um tipo para outro por exemplo, dados de caractere para numrico.

Introduo ao Oracle: SQL e PL/SQL 3-2

Funes SQL

Entrada arg 1 arg 2

Funo A funo executa a ao

Sada

Resultado valor

arg n

3-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes SQL As funes so um recurso avanado do SQL e podem ser usadas para realizar o seguinte: Executar clculos usando dados Modificar itens de dados individuais Manipular sada para grupos de linhas Formatar datas e nmeros para exibio Converter tipos de dados de coluna

As funes SQL podem aceitar argumentos e sempre retornar um valor. Observao: A maioria das funes descritas nesta lio so especficas para a verso SQL da Oracle.

Introduo ao Oracle: SQL e PL/SQL 3-3

Dois Tipos de Funes SQL

Funes

Funes de Uma nica Linha

Funes de Vrias Linhas

3-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes SQL (continuao) H dois tipos distintos de funes: Funes de Uma nica Linha Funes de Vrias Linhas

Funes de Uma nica Linha Essas funes operam somente linhas nicas e retornam um resultado por linha. H dois tipos diferentes de funes de uma nica linha. Esta lio aborda as seguintes: Caractere Nmero Data Converso

Funes de Vrias Linhas Essas funes manipulam grupos de linha a fim de obter um resultado por grupo de linhas. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, para uma lista completa de funes e sintaxes disponveis.

Introduo ao Oracle: SQL e PL/SQL 3-4

Funes 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
function_name (coluna|expresso, [arg1, arg2,...])

3-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Uma nica Linha Funes de uma nica linha so usadas para manipular itens de dados. Elas aceitam um ou mais argumentos e retornam um valor para cada linha retornada pela consulta. Um argumento pode ser um dos seguintes: Constante fornecida pelo usurio Valor varivel Nome da coluna Expresso Atuam em cada linha retornada na consulta Retornam um resultado por linha Podem retornar um valor de dados de um tipo diferente do mencionado Podem esperar um ou mais argumentos

Os recursos de funes de uma nica linha:

Podem ser usados em clusulas SELECT, WHERE e ORDER BY; podem ser aninhados Na sintaxe: function_name coluna expresso arg1, arg2 o nome da funo qualquer coluna de banco de dados nomeada qualquer string de caractere ou expresso calculada qualquer argumento a ser utilizado pela funo
Introduo ao Oracle: SQL e PL/SQL 3-5

Funes de Uma nica Linha


Caractere

Geral Funes de Uma nica Linha

Nmero

Converso

Data

3-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Uma nica Linha (continuao) Esta lio aborda as seguintes funes de uma nica linha: Funes de caractere: Aceitam entrada de caractere e podem retornar valores de nmero e caractere Funes numricas: Aceitam entrada numrica e retornam valores numricos Funes de data: Operam sobre valores de tipo de dados da data (Todas as funes de data retornam data um valor de tipo de dados de data exceto a funo MONTHS_BETWEEN, que retorna um nmero.) Funes de converso: Convertem um valor de um tipo de dados para outro Funes gerais: Funo NVL Funo DECODE

Introduo ao Oracle: SQL e PL/SQL 3-6

Funes de Caractere
Funes de caractere

Funes de Converso de Maisculas e Minsculas


LOWER UPPER INITCAP

Funes de manipulao de caractere


CONCAT SUBSTR LENGTH INSTR LPAD TRIM

3-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Caractere As funes de caractere de uma nica linha aceitam dados de caractere como entrada e podem retornar valores de nmero e de caractere. As funes de caractere podem ser dividas nas seguintes: Funes de Converso de Maisculas e Minsculas Funes de manipulao de caractere
Objetivo Converte valores de caractere alfabtico para letras minsculas Converte valores de caractere alfabtico para letras maisculas Converte valores de caractere alfabtico para usar maiscula na primeira letra de cada palavra e todas as outras letras em minsculas Concatena o primeiro valor do caractere ao segundo valor do caractere, equivalente ao operador de concatenao (||) Retorna caracteres especficos a partir do valor de caractere comeando na posio m, at n caracteres depois (Se m for negativo, a conta inicia no final do valor de caractere. Se n for omitido, so retornados todos os caracteres at o final da string.)

Funo LOWER(coluna|expresso) UPPER(coluna|expresso) INITCAP(coluna|expresso)

CONCAT(coluna1|expresso1, coluna2|expresso2) SUBSTR(coluna|expresso,m[,n])

Observao: Essas funes abordadas nesta lio so um subconjunto de funes disponveis.


Introduo ao Oracle: SQL e PL/SQL 3-7

Funes de Caractere
Funes de caractere

Funes de Converso de Maisculas e Minsculas


LOWER UPPER INITCAP

Funes de manipulao de caractere


CONCAT SUBSTR LENGTH INSTR LPAD TRIM

3-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Caractere (continuao)


Funo LENGTH(coluna|expresso) INSTR(coluna|expresso,m) LPAD(coluna|expresso, n, 'string') TRIM(anterior|posterior|ambos, trim_character FROM trim_source) Objetivo Retorna o nmero de caracteres do valor Retorna a posio numrica do caractere nomeado Preenche o valor de caracter justificado direita a uma largura total de n posies de caractere Permitem a voc organizar cabealhos ou caracteres de fim de linha (ou os dois) a partir de uma string de caractere. Se trim_character ou trim_source for um caractere literal, voc deve inclu-los entre aspas simples. Este um recurso disponvel a partir Oracle8i em diante.

Introduo ao Oracle: SQL e PL/SQL 3-8

Funes de Converso de Maisculas e Minsculas


Converter maisculas em minsculas para strings de caractere
Funo LOWER('SQL Course') UPPER('SQL Course') INITCAP('SQL Course') Resultado sql course SQL COURSE Sql Course

3-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Converso de Maisculas e Minsculas LOWER, UPPER e INITCAP so as trs funes de converso de maiscula em minscula. LOWER: Converte string de caracteres com letras maisculas e minsculas ou s maisculas para letras minsculas UPPER: Converte string de caracteres com letras maisculas e minsculas ou s minsculas para letras maisculas INITCAP: Converte a primeira letra de cada palavra para maiscula e mantm as outras letras em minscula

SQL> SELECT 'The job title for '||INITCAP(ename)||' is ' 2 ||LOWER(job) AS "EMPLOYEE DETAILS" 3 FROM emp; EMPLOYEE DETAILS ----------------------------------------The job title for King is president The job title for Blake is manager The job title for Clark is manager ... 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 3-9

Usando Funes de Converso de Maisculas e Minsculas


Exibir o nmero de funcionrio, nome e nmero de departamento do funcionrio Blake.
SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE ename = 'blake'; no rows selected SQL> SELECT 2 FROM 3 WHERE empno, ename, deptno emp ename = UPPER('blake');

EMPNO ENAME DEPTNO --------- ---------- --------7698 BLAKE 30


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

Funes de Converso de Maisculas e Minsculas (continuao) O exemplo do slide exibe o nmero de funcionrio, nome e nmero de departamento do funcionrio BLAKE. A clusula WHERE da primeira instruo SQL especifica o nome do funcionrio como 'blake'. Visto que todos os dados da tabela EMP so armazenados em letra maiscula, o nome 'blake' no localiza uma correspondncia na tabela EMP e como resultado nenhuma linha ser selecionada. A clusula WHERE da segunda instruo SQL especifica que o nome do funcionrio na tabela EMP seja comparado a 'blake', convertido para letras maisculas. Agora que os dois nomes esto em maiscula, localizada uma correspondncia e uma linha selecionada. A clusula WHERE pode ser escrita novamente da seguinte forma para produzir o mesmo resultado:
WHERE ename = 'BLAKE'

O nome na entrada aparece como se estivesse armazenado no banco de dados. Para exibir o nome com a primeira letra maiscula, use a funo INITCAP na instruo SELECT.
SQL> SELECT 2 FROM 3 WHERE empno, INITCAP(ename), deptno emp ename = UPPER('blake');

Introduo ao Oracle: SQL e PL/SQL 3-10

Funes de Manipulao de Caractere


Manipular strings de caractere
Funo Resultado

CONCAT('Good', 'String') SUBSTR('String',1,3) LENGTH('String') INSTR('String', 'r') LPAD(sal,10,'*') TRIM('S' FROM 'SSMITH')
3-11

GoodString Str 6 3 ******5000 MITH

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Manipulao de Caractere CONCAT, SUBSTR, LENGTH, INSTR, LPAD e TRIM so as seis funes de manipulao de caractere abordadas nesta lio. CONCAT: Une valores de juno (Voc est limitado a usar dois parmetros com CONCAT.) SUBSTR: Extrai uma string de determinado tamanho LENGTH: Exibe o tamanho de uma string como um valor numrico INSTR: Localiza a posio numrica do caractere nomeado LPAD: Preenche o valor do caractere justificado direita

Observao: A funo de manipulao de caractere RPAD preenche o valor de caractere justificado esquerda TRIM: Organiza cabealho ou caracteres de fim de linha (ou os dois) a partir de uma string de caractere. Se trim_character ou trim_source forem um caractere literal, voc deve inclu-los entre aspas simples.

Introduo ao Oracle: SQL e PL/SQL 3-11

Usando as Funes de Manipulao de Caractere


SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename), 2 INSTR(ename, 'A') 3 FROM emp 4 WHERE SUBSTR(job,1,5) = 'SALES';
ENAME ---------MARTIN ALLEN TURNER WARD CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') ------------------- ------------- ---------------MARTINSALESMAN 6 2 ALLENSALESMAN 5 1 TURNERSALESMAN 6 0 WARDSALESMAN 4 2

3-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Manipulao de Caractere (continuao) O exemplo do slide exibe o nome do funcionrio e o cargo juntos, o tamanho do nome e a posio numrica da letra A no nome do funcionrio, para todos os funcionrios que esto em vendas. Exemplo Modifique a instruo SQL no slide a fim de exibir os dados daqueles funcionrios cujos nomes terminam com N.
SQL> SELECT 2 3 FROM 4 WHERE ENAME -------MARTIN ALLEN ename, CONCAT(ename, job), LENGTH(ename), INSTR(ename, 'A') emp SUBSTR(ename, -1, 1) = 'N';

CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A') ------------------- ------------- ---------------MARTINSALESMAN 6 2 ALLENSALESMAN 5 1

Introduo ao Oracle: SQL e PL/SQL 3-12

Funes Numricas
ROUND: Arredonda valor para determinado decimal ROUND(45.926, 2) 45.93 TRUNC: Trunca valor para determinado decimal TRUNC(45.926, 2) 45.92

MOD: Retorna o restante da diviso MOD(1600, 300) 100

3-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes Numricas As funes numricas aceitam entrada numrica e retornam valores numricos. Esta seo descreve algumas das funes numricas.
Funo ROUND(coluna|expresso,n) Objetivo Arredonda a coluna, expresso ou valor para n casas decimais ou se n for omitido, nenhuma casa decimal (Se n for negativo, os nmeros esquerda do ponto decimal sero arredondados.) Trunca a coluna, expresso ou valor para n casas decimais ou se n for omitido, nenhuma casa decimal (Se n for negativo, os nmeros esquerda do ponto decimal sero truncados para zero.) Retorna o resto de m dividido por n.

TRUNC(coluna|expresso,n)

MOD(m,n)

Observao: Esta lista um subconjunto das funes numricas disponveis. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "Number Functions".

Introduo ao Oracle: SQL e PL/SQL 3-13

Usando a Funo ROUND


SQL> SELECT ROUND(45.923,2), ROUND(45.923,0), 2 ROUND(45.923,-1) 3 FROM DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1) --------------- -------------- ----------------45.92 46 50

3-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funo ROUND A funo ROUND arredonda a coluna, expresso ou valor para n casas decimais. Se o segundo argumento for 0 ou estiver ausente, o valor ser arredondado para nenhuma casa decimal. Se o segundo argumento for 2, o valor ser arredondado para duas casas decimais. Da mesma forma, se o segundo argumento for -2, o valor ser arredondado para duas casas decimais para a esquerda. A funo ROUND pode tambm ser utilizada com funes de data. Voc ver exemplos mais adiante nesta seo. A tabela DUAL fictcia. Mais informaes sero fornecidas mais tarde.

Introduo ao Oracle: SQL e PL/SQL 3-14

Usando a Funo TRUNC

SQL> SELECT TRUNC(45.923,2), TRUNC(45.923), 2 TRUNC(45.923,-1) 3 FROM DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1) --------------- ------------- --------------45.92 45 40

3-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funo TRUNC A funo TRUNC trunca a coluna, expresso ou valor para n casas decimais. A funo TRUNC trabalha com argumentos similares aos da funo ROUND. Se o segundo argumento for 0 ou estiver ausente, o valor ser truncado para nenhuma casa decimal. Se o segundo argumento for 2, o valor ser truncado para duas casas decimais. Da mesma forma, se o segundo argumento for -2, o valor ser truncado para duas casas decimais para esquerda. Semelhante funo ROUND, a funo TRUNC pode ser usada com funes de data.

Introduo ao Oracle: SQL e PL/SQL 3-15

Usando a Funo MOD


Calcular o restante da proporo do salrio para comisso de todos os funcionrios cujo cargo salesman.
SQL> SELECT 2 FROM 3 WHERE ename, sal, comm, MOD(sal, comm) emp job = 'SALESMAN';

ENAME SAL COMM MOD(SAL,COMM) ---------- --------- --------- ------------MARTIN 1250 1400 1250 ALLEN 1600 300 100 TURNER 1500 0 1500 WARD 1250 500 250
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

3-16

Funo MOD A funo MOD localiza o restante do valor 1 dividido pelo valor 2. O exemplo do slide calcula o restante da proporo de salrio para comisso de todos os funcionrios cujo cargo salesman.

Introduo ao Oracle: SQL e PL/SQL 3-16

Trabalhando com Datas


O Oracle armazena datas em um formato numrico interno: sculo, ano, ms, dia, horas, minutos, segundos. O formato de data default DD-MON-YY. SYSDATE uma funo de retorno de data e hora. DUAL uma tabela fictcia usada para visualizar SYSDATE.

3-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Formato de Data Oracle Os produtos da Oracle armazenam datas em um formato numrico interno, representando o sculo, ano, ms, dia, horas, minutos e segundos. O formato de entrada e exibio default para qualquer data DD-MON-YY. Datas vlidas para a Oracle esto entre 1 de janeiro, 4712 A.C. e 31 de dezembro, 9999 D.C. SYSDATE SYSDATE a funo de data que retorna a data e a hora atual. Voc pode usar o SYSDATE da mesma forma como usaria qualquer outro nome de coluna. Por exemplo, possvel exibir a data atual selecionando SYSDATE a partir da tabela. Costuma-se selecionar SYSDATE em uma tabela fictcia chamada DUAL. DUAL A tabela DUAL pertence ao usurio SYS e pode ser acessada por todos os usurios. Ela contm uma coluna, DUMMY, e uma linha com o valor X. A tabela DUAL til quando deseja retornar um valor somente uma vez por exemplo, o valor de uma constante, pseudocoluna ou expresso que no derivada de uma tabela com dados do usurio. A tabela DUAL, em geral, utilizada pela totalidade de sintaxe da clusula SELECT, pois as duas clusulas SELECT e FROM so obrigatrias e diversos clculos no precisam selecionar das tabelas reais. Exemplo Exibir a data atual usando a tabela DUAL. SQL> SELECT SYSDATE 2 FROM DUAL;
Introduo ao Oracle: SQL e PL/SQL 3-17

Aritmtica com Datas


Adicionar ou subtrair um nmero de, ou para, uma data para um valor de data resultante. Subtrair duas datas a fim de localizar o nmero de dias entre estas datas. Adicionar horas para uma data dividindo o nmero de horas por 24.

3-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Aritmtica com Datas J que os bancos de dados armazenam datas como nmeros, voc pode executar clculos usando operadores aritmticos como adio e subtrao. possvel adicionar e subtrair constantes de nmero bem como datas. Voc pode executar as seguintes operaes:
Operao data + nmero data - nmero data - data data + nmero/24 Resultado Data Data Nmero de dias Data Descrio Adiciona um nmero de dias para uma data Subtrai um nmero de dias de uma data Subtrai uma data de outra Adiciona um nmero de horas para uma data

Introduo ao Oracle: SQL e PL/SQL 3-18

Usando Operadores Aritmticos com Datas


SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS 2 FROM emp 3 WHERE deptno = 10;

ENAME ---------KING CLARK MILLER

WEEKS --------830.93709 853.93709 821.36566

3-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Aritmtica com Datas (continuao) O exemplo no slide exibe o nome e o nmero de semanas empregadas por todos os funcionrios do departamento 10. Ele subtrai a data atual (SYSDATE) a partir da data na qual o funcionrio foi admitido e divide o resultado por 7 a fim de calcular o nmero de semanas que o trabalhador est empregado. Observao: SYSDATE uma funo SQL que retorna a data e a hora atual. Seus resultados podem ser diferentes dos obtidos no exemplo.

Introduo ao Oracle: SQL e PL/SQL 3-19

Funes de Data
Funo Descrio Nmero de meses entre duas datas Adiciona meses de calendrio para a data Dia seguinte da data especificada ltimo dia do ms Data de arredondamento Data para truncada

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC

3-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Data Funes de data operam em datas Oracle. Todas as funes de data retornam um valor de tipo de dados DATE exceto MONTHS_BETWEEN, que retorna um valor numrico. MONTHS_BETWEEN(data1, data2): Localiza o nmero de meses entre a data 1 e a data 2. O resultado pode ser positivo ou negativo. Se data1 for posterior a data2, o resultado ser positivo; se data1 for anterior a data2, o resultado ser negativo. A parte no-inteira do resultado representa uma parte do ms. ADD_MONTHS(data, n): Adiciona um nmero n de meses de calendrio data. O valor de n deve ser inteiro ou pode ser negativo. NEXT_DAY(data, 'char'): Localiza a data do prximo dia especificado da data seguinte da semana ('char'). O valor de char pode ser um nmero representando um dia ou uma string de caractere. LAST_DAY(data): Localiza a data do ltimo dia do ms que contm a data. ROUND(data[,'fmt']): Retorna a data arredondada para a unidade especificada pelo modelo de formato fmt. Se o modelo de formato fmt for omitido, a data ser arredondada para o dia mais prximo. TRUNC(data[, 'fmt']): Retorna a data com a parte da hora do dia truncada para a unidade especificada pelo modelo de formato fmt. Se o modelo de formato fmt for omitido, a data ser truncada para o dia mais prximo.

Esta lista um subconjunto de funes de data disponveis. Os modelos de formato so abordados mais tarde nesta lio. Exemplos de modelos de formato so ms e ano.
Introduo ao Oracle: SQL e PL/SQL 3-20

Usando Funes de Data


MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
19.6774194

ADD_MONTHS ('11-JAN-94',6)

'11-JUL-94'

NEXT_DAY ('01-SEP-95','FRIDAY')

'08-SEP-95'

LAST_DAY('01-SEP-95')
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

'30-SEP-95'

3-21

Funes de Data (continuao) Para todos os funcionrios contratados por menos de 200 meses, exibir o nmero do funcionrio, a data de admisso, o nmero de meses contratado, a data de reviso semestral, a primeira sexta-feira aps a data da admisso e o ltimo dia do ms em que foi admitido.
SQL> SELECT 2 3 4 5 FROM 6 WHERE empno, hiredate, MONTHS_BETWEEN(SYSDATE, hiredate) TENURE, ADD_MONTHS(hiredate, 6) REVIEW, NEXT_DAY(hiredate, 'FRIDAY'), LAST_DAY(hiredate) emp MONTHS_BETWEEN (SYSDATE, hiredate)<200;

EMPNO HIREDATE TENURE REVIEW NEXT_DAY( LAST_DAY( - --------- --------- --------- --------- --------7839 17-NOV-81 192.24794 17-MAY-82 20-NOV-81 30-NOV-81 7698 01-MAY-81 198.76407 01-NOV-81 08-MAY-81 31-MAY-81 ... 11 rows selected.

-----

Introduo ao Oracle: SQL e PL/SQL 3-21

Usando Funes de Data


ROUND('25-JUL-95','MONTH') ROUND('25-JUL-95','YEAR') TRUNC('25-JUL-95','MONTH') TRUNC('25-JUL-95','YEAR')
01-AUG-95 01-JAN-96 01-JUL-95 01-JAN-95

3-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Data (continuao) As funes ROUND e TRUNC podem ser usadas para os valores de data e nmero. Quando usadas com datas, estas funes arredondam ou truncam o modelo de formato especificado. Assim, possvel arredondar datas para o ano ou ms mais prximo. Exemplo Compare as datas de admisso de todos os funcionrios contratados em 1982. Exiba o nmero do funcionrio, a data de admisso e o ms de incio usando as funes ROUND e TRUNC.
SQL> SELECT 2 3 FROM 4 WHERE EMPNO --------7788 7934 empno, hiredate, ROUND(hiredate, 'MONTH'), TRUNC(hiredate, 'MONTH') emp hiredate like '%1982'; ROUND(HIR --------01-DEC-82 01-FEB-82 TRUNC(HIR --------01-DEC-82 01-JAN-82

HIREDATE --------09-DEC-82 23-JAN-82

Introduo ao Oracle: SQL e PL/SQL 3-22

Funes de Converso
Converso de tipo de dados

Converso implcita de tipo de dados

Converso explcita de tipo de dados

3-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Converso Alm dos tipos de dados Oracle, as colunas de tabela em um banco de dados Oracle8 podem ser definidas usando os tipos de dados ANSI, DB2 e SQL/DS. No entanto, o Oracle Server converte internamente tais tipos de dados para tipos de dados Oracle8. Em alguns casos, o Oracle Server aceita dados de um tipo de dados em que espera dados de um tipo de dados diferente. Isso permitido quando o Oracle Server pode converter dados automaticamente para o tipo de dados esperado. Essa converso de tipo de dados pode ser realizada de forma implcita pelo Oracle Server ou explcita pelo usurio. As converses implcitas de tipo de dados funcionam de acordo com as regras explicadas nos prximos dois slides. As converses explcitas de tipo de dados podem ser realizadas usando-se as funes de converso. As funes de converso convertem um valor de um tipo de dados para outro. Geralmente, o formato dos nomes de funo seguem a conveno tipo de dados TO tipo de dados. O primeiro tipo de dados um tipo de dados de entrada; o ltimo tipo de dados de sada. Observao: Embora a converso implcita de tipos de dados esteja disponvel, recomendvel que voc realize a converso explcita de tipo de dados a fim de garantir a confiabilidade das instrues SQL.

Introduo ao Oracle: SQL e PL/SQL 3-23

Converso Implcita de Tipo de Dados


Para atribuies, o Oracle Server pode converter automaticamente o seguinte:
De VARCHAR2 ou CHAR VARCHAR2 ou CHAR NUMBER DATE
3-24

Para NUMBER DATE VARCHAR2 VARCHAR2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Converso Implcita de Tipo de Dados A atribuio ocorre se o Oracle Server puder converter o tipo de dados do valor nela usado para a atribuio destino.

Introduo ao Oracle: SQL e PL/SQL 3-24

Converso Implcita de Tipo de Dados


Para avaliao da expresso, o Oracle Server pode converter automaticamente o seguinte:
De VARCHAR2 ou CHAR VARCHAR2 ou CHAR Para NUMBER DATE

3-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Converso Implcita de Tipo de Dados Em geral, o Oracle Server usa a regra para expresso quando a converso de tipo de dados necessria em lugares no cobertos por uma regra para as converses de atribuio. Observao: Converses de CHAR para NUMBER ocorrem somente se a string de caractere representar um nmero vlido. Converses de CHAR para DATE ocorrem somente se a string de caractere possuir o formato default DD-MON-YY.

Introduo ao Oracle: SQL e PL/SQL 3-25

Converso Explcita de Tipo de Dados


TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR
3-26

TO_CHAR

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Converso Explcita de Tipo de Dados O SQL oferece trs funes para converter um valor de um tipo de dados para outro:
Funo TO_CHAR(nmero|data,[ fmt], [nlsparams]) Objetivo Converte um valor de nmero ou data para uma string de caractere VARCHAR2 com modelo de formato fmt. Converso de Nmero: O parmetro nlsparams especifica os seguintes caracteres, que so retornados por elementos de formato de nmero: Caractere decimal Separador de grupo Smbolo da moeda local Smbolo da moeda internacional

Se nlsparams ou qualquer outro parmetro for omitido, essa funo utilizar os valores de parmetro default para a seo.

Introduo ao Oracle: SQL e PL/SQL 3-26

Converso Explcita de Tipo de Dados


TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR
3-27

TO_CHAR

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Converso Explcita de Tipo de Dados (continuao)


Funo TO_CHAR(nmero|data,[ fmt], [nlsparams]) Objetivo Converso de data: O parmetro nlsparams especifica o idioma no qual os nomes de dias, meses e abreviao retornam. Se este parmetro for omitido, essa funo utilizar os idiomas de data default para a seo. Converte uma string de caractere contendo dgitos para um nmero no formato especificado pelo modelo de formato opcional fmt. O parmetro nlsparams tem a mesma finalidade nesta funo como na funo TO_CHAR para a converso de nmero. TO_DATE(carac,[fmt],[nlsparams]) Converte uma string de caractere representando uma data para um valor de data de acordo com o fmt especificado. Se fmt for omitido, o formato DD-MON-YY. O parmetro nlsparams possui a mesma finalidade na funo TO_CHAR para a converso de data.

TO_NUMBER(carac,[fmt], [nlsparams])

Introduo ao Oracle: SQL e PL/SQL 3-27

Converso Explcita de Tipo de Dados


TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR
3-28

TO_CHAR

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Converso Explcita de Tipo de Dados (continuao) Observao: A lista de funes mencionadas nesta lio um subconjunto das funes de converso disponveis. Para obter mais informaes, consulte o Oracle8 Server SQL Reference, Release 8.0, "Conversion Functions".

Introduo ao Oracle: SQL e PL/SQL 3-28

Funo TO_CHAR com Datas


TO_CHAR(data, 'fmt')

O modelo de formato: Deve estar entre aspas simples e fazer distino entre maisculas e minsculas Pode incluir qualquer elemento de formato de data vlido Tem um elemento fm para remover espaos preenchidos ou suprimir zeros esquerda separado do valor de data por uma vrgula
3-29 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exibindo uma Data em um Formato Especfico Anteriormente, todos os valores de data Oracle eram exibidos no formato DD-MON-YY. A funo TO_CHAR permite converter uma data a partir desse formato default para um especificado por voc. Diretrizes O modelo de formato deve estar entre aspas simples e fazer distino entre maisculas e minsculas. O modelo de formato pode incluir qualquer elemento de formato de data vlido. Certifique-se de separar o valor da data do modelo de formato por uma vrgula. Os nomes de dias e meses na sada so preenchidos automaticamente por espaos. Para remover os espaos em branco ou suprimir os zeros esquerda, use o modo de preenchimento do elemento fm. Voc pode redimensionar o tamanho da exibio do campo de caractere resultante com o comando COLUMN do SQL*Plus. A largura da coluna resultante , por padro, de 80 caracteres.
empno, TO_CHAR(hiredate, 'MM/YY') Month_Hired emp ename = 'BLAKE';

SQL> SELECT 2 FROM 3 WHERE

Introduo ao Oracle: SQL e PL/SQL 3-29

Elementos de Modelo de Formato de Data


YYYY YEAR MM MONTH DY DAY
3-30

Ano completo em nmeros Ano por extenso Valor de dois dgitos para ms Abreviao de trs letras do dia da semana Abreviao de trs letras do dia da semana Nome completo do dia

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Elementos de Exemplo de Formatos de Data Vlidos


Elemento SCC ou CC Anos em datas YYYY ou SYYYY YYY ou YY ou Y Y,YYY IYYY, IYY, IY, I SYEAR ou YEAR BC ou AD B.C. ou A.D. Q MM MONTH MON RM WW ou W DDD ou DD ou D DAY DY J Descrio Sculo; Prefixos S data AC com Ano; Prefixos S data AC com ltimos trs, dois ou um dgitos do ano Ano com vrgula nesta posio Quatro, trs, dois ou um dgito do ano com base no padro ISO Ano inteiro; Prefixos S data AC com Indicador AC/DC Indicador com pontos AC/DC Trimestre do ano Ms, valor de dois dgitos Nome do ms preenchido com espaos limitado a nove caracteres Nome do ms, abreviao de trs letras Ms em nmeros romanos Semana do ano ou ms Dia do ano, ms ou semana Nome do dia preenchido com espaos limitado a nove caracteres Nome do dia; abreviao de trs letras Dia do calendrio juliano; o nmero de dias desde 31de dezembro 4713 BC

Introduo ao Oracle: SQL e PL/SQL 3-30

Elementos de Modelo de Formato de Data



Elementos de hora formatam a parte de hora da data.
HH24:MI:SS AM 15:45:32 PM

Adicionar strings de caractere incluindo-as entres aspas.


DD "of" MONTH 12 of OCTOBER

Sufixos de nmero escrevem os nmeros por extenso.


ddspth fourteenth

3-31

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Formatos de Hora Use os formatos listados tabelas a seguir para exibir informaes de hora e literais e alterar numerais para nmeros escritos.
Elemento AM ou PM A.M. ou P.M. HH ou HH12 ou HH24 MI SS SSSSS Descrio Indicador meridiano Indicador meridiano com pontos Horas do dia ou hora (1 a 12) ou hora (0 a 23) Minuto (0 a 59) Segundo (0 a 59) Segundos aps a meia-noite (086399)

Outros Formatos
Elemento / . , "of the" Descrio A pontuao reproduzida no resultado A string entre aspas reproduzida no resultado

Especificando Sufixos para Influenciar Exibio de Nmero


Elemento TH SP SPTH ou THSP Descrio Nmero ordinal (por exemplo, DDTH para 4TH) Nmero por extenso (por exemplo, DDSP para FOUR) Nmeros ordinais por extenso (por exemplo, DDSPTH para FOURTH)

Introduo ao Oracle: SQL e PL/SQL 3-31

Usando a Funo TO_CHAR com Datas


SQL> SELECT ename, 2 TO_CHAR(hiredate, 'fmDD Month YYYY') HIREDATE 3 FROM emp;

ENAME HIREDATE ---------- ----------------KING 17 November 1981 BLAKE 1 May 1981 CLARK 9 June 1981 JONES 2 April 1981 MARTIN 28 September 1981 ALLEN 20 February 1981 ... 14 rows selected.

3-32

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funo TO_CHAR com Datas A instruo SQL no slide exibe o nome e as datas de admisso para todos os funcionrios. A data de admisso aparece como 17 November 1981. Exemplo Modificar o exemplo do slide para exibir as datas em um formato que aparea como Seventh of February 1981 08:00:00 AM.
SQL> SELECT 2 3 4 FROM ename, TO_CHAR(hiredate, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM') HIREDATE emp;

ENAME HIREDATE ---------- -----------------------------------------------KING Seventeenth of November 1981 12:00:00 AM BLAKE First of May 1981 12:00:00 AM ... 14 rows selected.

Note que o ms segue o formato do modelo de formato especificado, ou seja, a primeira letra em maiscula e o restante em minscula.
Introduo ao Oracle: SQL e PL/SQL 3-32

Funo TO_CHAR com Nmeros


TO_CHAR(nmero, 'fmt')

Use estes formatos com a funo TO_CHAR para exibir um valor de nmero como um caractere:
9 0 $ L . ,
3-33

Representa um nmero Forces a zero to be displayed Coloca um sinal de dlar flutuante Usa o smbolo da moeda local flutuante Imprime um ponto decimal Imprime um indicador de milhar
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funo TO_CHAR com Nmeros Ao trabalhar com valores de nmero tais como strings de caractere, voc deve converter esse nmeros para o tipo de dados de caracter usando a funo TO_CHAR , que traduz o tipo de dados de NUMBER para tipo de dados VARCHAR2. Essa tcnica particularmente til com concatenao. Elementos de Formato de Nmero Se estiver convertendo um nmero para tipo de dados de caractere, voc pode usar os seguintes elementos:
Elemento 9 0 $ L . , MI PR EEEE V B Descrio Posio numrica (nmero de 9s determinam o tamanho da exibio) Exibe zeros esquerda Sinal de dlar flutuante Smbolo da moeda local flutuante Ponto decimal na posio especificada Vrgula na posio especificada Sinais de menos direita (valores negativos) Coloca nmeros negativos entre parnteses Notao cientfica (formato deve especificar quatro Es) Multiplica por 10 n vezes (n = nmero de 9s aps o V) Exibe valores de zero como espao, no 0 Exemplo 999999 099999 $999999 L999999 999999.99 999,999 999999MI 999999PR 99.999EEEE 9999V99 B9999.99 Resultado 1234 001234 $1234 FF1234 1234.00 1,234 1234<1234> 1.234E+03 123400 1234.00

Introduo ao Oracle: SQL e PL/SQL 3-33

Usando a Funo TO_CHAR com Nmeros


SQL> SELECT 2 FROM 3 WHERE TO_CHAR(sal,'$99,999') SALARY emp ename = 'SCOTT';

SALARY -------$3,000

3-34

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes O Oracle Server exibe uma string com sinais numricos (#) no lugar de um nmero inteiro cujos dgitos excedam o nmero de dgitos fornecidos no modelo de formato. O Oracle Server arredonda os valores decimais armazenados para o nmero de espaos decimais fornecidos no modelo de formato.

Introduo ao Oracle: SQL e PL/SQL 3-34

Funes TO_NUMBER e TO_DATE


Converter uma string de caractere para um formato de nmero usando a funo TO_NUMBER
TO_NUMBER(carac[, 'fmt'])

Converter uma string de caractere para um formato de data usando a funo TO_DATE
TO_DATE(carac[, 'fmt'])

3-35

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes TO_NUMBER e TO_DATE Talvez deseje converter uma string de caractere para um nmero ou data. Para completar essa tarefa, use as funes TO_NUMBER ou TO_DATE. O modelo de formato que escolher ser baseado nos elementos de formato demonstrados anteriormente. Exemplo Exibir os nomes e as datas de admisso para todos os funcionrios contratados em 22 de fevereiro de 1981.
SQL> SELECT ename, hiredate 2 FROM emp 3 WHERE hiredate = TO_DATE('February 22, 1981', 'Month dd,

YYYY');

ENAME HIREDATE ---------- -------WARD 22-FEB-81

Introduo ao Oracle: SQL e PL/SQL 3-35

Formato de Data RR
Ano Atual 1995 1995 2001 2001 Data Especificada 27-OCT-95 27-OCT-17 27-OCT-17 27-OCT-95 Formato RR 1995 2017 2017 1995 Formato YY 1995 1917 2017 2095

Se o ano de dois dgitos for:


049 Se dois dgitos do ano atual forem: 049 A data de devoluo est no sculo atual A data de devoluo est no sculo anterior 5099 A data de devoluo est no sculo seguinte A data de devoluo est no sculo atual

5099

3-36

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Elemento de Formato de Data RR O formato de data RR similar ao elemento YY, porm ele permite especificar sculos diferentes. Voc pode usar um elemento de formato de data RR no lugar de YY, para que o sculo do valor de devoluo varie de acordo com o ano de dois dgitos especificado e com os ltimos dois dgitos do ano atual. A tabela do slide resume o comportamento do elemento RR.
Ano Atual 1994 1994 2001 Data Fornecida Interpretada (RR) 1995 2017 2017 Interpretada (YY) 1995 1917 2017

27-OCT-95 27-OCT-17 27-OCT-17

Introduo ao Oracle: SQL e PL/SQL 3-36

Funo NVL
Converte nulo para um valor real Os tipos de dados que podem ser usados so data, caractere e nmero. Os tipos de dados devem corresponder com
NVL(comm,0) NVL(hiredate,'01-JAN-97') NVL(job,'No Job Yet')

3-37

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Funo NVL Para converter um valor nulo para um valor real, use a funo NVL. Syntax
NVL (expr1, expr2)

onde:

expr1 expr2

o valor de origem ou expresso que pode conter nulo o valor de destino para a converso de nulo

Voc pode usar a funo NVL para converter qualquer tipo de dados, porm o valor de devoluo sempre o mesmo do tipo de dados da expr1. Converses NVL para Vrios Tipos de Dados
Tipo de dados NUMBER DATE CHAR ou VARCHAR2 Exemplo de Converso NVL(number_column,9) NVL(date_column, '01-JAN-95') NVL(character_column, 'Unavailable')

Introduo ao Oracle: SQL e PL/SQL 3-37

Usando a Funo NVL


SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0) 2 FROM emp; ENAME SAL COMM (SAL*12)+NVL(COMM,0) ---------- --------- --------- -------------------KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 JONES 2975 35700 MARTIN 1250 1400 16400 ALLEN 1600 300 19500 ... 14 rows selected.

3-38

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funo NVL Para calcular a remunerao anual de todos os funcionrios, voc precisa multiplicar o salrio mensal por 12 e, em seguida, adicionar a comisso.
SQL> SELECT ename, sal, comm, (sal*12)+comm 2 FROM emp; ENAME SAL COMM (SAL*12)+COMM ---------- --------- --------- ------------KING 5000 BLAKE 2850 CLARK 2450 JONES 2975 MARTIN 1250 1400 16400 ... 14 rows selected.

Note que a remunerao anual calculada somente para aqueles funcionrios que recebem uma comisso. Se qualquer valor de coluna na expresso for nulo, o resultado ser nulo. Para calcular valores para todos os funcionrios, voc deve converter o valor nulo para um nmero antes de aplicar o operador aritmtico. No exemplo do slide, a funo para NVL usada para converter valores nulos para zero.

Introduo ao Oracle: SQL e PL/SQL 3-38

Funo DECODE
Facilita pesquisas condicionais realizando o trabalho de uma instruo CASE ou IFTHEN-ELSE
DECODE(col/express, pesquisa1, resultado1 [, pesquisa2, resultado2,...,] [, default])

3-39

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Funo DECODE A funo DECODE decodifica uma expresso de um modo similar lgica IF-THEN-ELSE usada em diversas linguagens. A funo DECODE decodifica a expresso aps compar-la a cada valor de pesquisa. Se a expresso for a mesma da pesquisa, o resultado retornado. Se o valor default for omitido, ser retornado um valor nulo onde um valor de pesquisa no corresponde a quaisquer valores de resultado.

Introduo ao Oracle: SQL e PL/SQL 3-39

Usando a Funo DECODE


SQL> SELECT job, sal, 2 DECODE(job, 'ANALYST', 3 'CLERK', 4 'MANAGER', 5 6 REVISED_SALARY 7 FROM emp; JOB SAL REVISED_SALARY --------- --------- -------------PRESIDENT 5000 5000 MANAGER 2850 3420 MANAGER 2450 2940 ... 14 rows selected.
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

SAL*1.1, SAL*1.15, SAL*1.20, SAL)

3-40

Usando a Funo DECODE Na instruo SQL acima, o valor de JOB est decodificado. Se JOB for ANALYST, o aumento de salrio de 10%; se JOB for CLERK, o aumento de salrio de 15%; se JOB for MANAGER, o aumento de salrio de 20%. Para todas as outras funes de trabalho, no h aumento de salrio. A mesma instruo pode ser escrita como uma instruo IF-THEN-ELSE:
IF job = IF job = IF job = ELSE sal 'ANALYST' 'CLERK' 'MANAGER' = sal THEN THEN THEN sal = sal*1.1 sal = sal*1.15 sal = sal*1.20

Introduo ao Oracle: SQL e PL/SQL 3-40

Usando a Funo DECODE


Exibir a taxa de imposto aplicvel para cada funcionrio do departamento 30.
SQL> SELECT ename, sal, 2 DECODE(TRUNC(sal/1000, 0), 3 0, 0.00, 4 1, 0.09, 5 2, 0.20, 6 3, 0.30, 7 4, 0.40, 8 5, 0.42, 9 6, 0.44, 10 0.45) TAX_RATE 11 FROM emp 12 WHERE deptno = 30;

3-41

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exemplo O slide mostra outro exemplo usando a funo DECODE. Neste exemplo, determinamos a taxa de imposto para cada funcionrio do departamento 30 com base no salrio mensal. As taxas de imposto so mencionadas por valores na tabela a seguir.
Faixa Salarial Mensal US$0,00 - 999,99 US$1.000,00 - 1.999,99 US$2.000,00 - 2.999,99 US$3.000,00 - 3.999,99 US$4.000,00 - 4.999,99 US$5.000,00 - 2.999,99 US$6.000,00 - 6.999,99 US$7.000,00 ou superior Taxa 0% 9% 20% 30% 40% 42% 44% 45%

ENAME SAL TAX_RATE ---------- --------- --------BLAKE 2850 .2 MARTIN 1250 .09 ALLEN 1600 .09 TURNER 1500 .09 ... 6 rows selected.
Introduo ao Oracle: SQL e PL/SQL 3-41

Aninhando Funes
As funes de uma nica linha podem ser aninhadas em qualquer nvel. Funes aninhadas so avaliadas a partir do nvel mais interno para o nvel mais externo.

F3(F2(F1(col,arg1),arg2),arg3)
Etapa 1 = Resultado 1 Etapa 2 = Resultado 2 Etapa 3 = Resultado 3

3-42

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Aninhando Funes As funes de uma nica linha podem ser aninhadas em qualquer nvel. As funes aninhadas so avaliadas desde o nvel mais interno at o mais externo. Alguns exemplos a seguir mostram a flexibilidade dessas funes.

Introduo ao Oracle: SQL e PL/SQL 3-42

Aninhando Funes

SQL> SELECT 2 3 FROM 4 WHERE

ename, NVL(TO_CHAR(mgr),'No Manager') emp mgr IS NULL;

ENAME NVL(TO_CHAR(MGR),'NOMANAGER') ---------- ----------------------------KING No Manager

3-43

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Aninhando Funes (continuao) O exemplo do slide exibe o presidente da empresa, que no possui nenhum gerente. A avaliao da instruo SQL envolve duas etapas: 1. Avaliar a funo interna a fim de converter um valor de nmero para uma string de caractere. Result1 = TO_CHAR(mgr) 2. Avaliar a funo externa a fim de substituir o valor nulo com uma string de texto. NVL(Result1, 'No Manager') A expresso inteira transforma-se no cabealho da coluna, pois no foi fornecido nenhum apelido de coluna. Exemplo Exibir a data da prxima sexta-feira, que fica seis meses aps a data de admisso. A data resultante deve aparecer como Friday, March 12th, 1982. Ordenar os resultados por data de admisso. SQL> SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS 2 (hiredate, 6), 'FRIDAY'), 3 'fmDay, Month ddth, YYYY') 4 "Next 6 Month Review" 5 FROM emp 6 ORDER BY hiredate;

Introduo ao Oracle: SQL e PL/SQL 3-43

Sumrio
Use as funes para realizar o seguinte: Executar clculos usando dados Modificar itens de dados individuais Manipular sada para grupos de linhas Alterar formatos de data para exibio Converter tipos de dados de coluna

3-44

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Uma nica Linha As funes de uma nica linha podem ser aninhadas em qualquer nvel. As funes de uma nica linha podem manipular o seguinte: Dados de caractere: LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LENGTH Dados de nmero: ROUND, TRUNC, MOD Dados de data: MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY, ROUND, TRUNC Valores de data podem tambm usar operadores aritmticos. As funes de converso podem converter valores de caractere, de data e numrico: TO_CHAR, TO_DATE, TO_NUMBER

SYSDATE e DUAL SYSDATE uma funo de data que retorna a data e a hora atual. Costuma-se selecionar SYSDATE em uma tabela fictcia chamada DUAL.

Introduo ao Oracle: SQL e PL/SQL 3-44

Viso Geral do Exerccio


Criando consultas que exigem o uso de funes numricas, de caractere e de data Usando concatenao com funes Criando consultas que diferenciam entre letras maisculas e minsculas para testar a utilidade das funes de caractere Executando clculos de anos e meses de servio de um funcionrio Determinando a data de reviso para um funcionrio
3-45 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Este exerccio desenvolvido para oferecer a voc uma variedade de exerccios usando diferentes funes disponveis para tipos de dados de caractere, de nmero e data. Lembre-se que para funes aninhadas, os resultados so avaliados a partir da funo mais interna para a funo mais externa.

Introduo ao Oracle: SQL e PL/SQL 3-45

Exerccio 3 1. Crie uma consulta para exibir a data atual. Coloque um label na coluna Date.
Date --------28-OCT-97

2. Exiba o nmero do funcionrio, o nome, o salrio e o aumento salarial de 15% expresso como nmero inteiro. Coloque um label na coluna New Salary. Salve a instruo SQL em um arquivo nomeado p3q2.sql. 3. Execute a consulta no arquivo p3q2.sql.
EMPNO ENAME SAL New Salary ----- ------- ----- ---------7839 KING 5000 5750 7698 BLAKE 2850 3278 7782 CLARK 2450 2818 7566 JONES 2975 3421 7654 MARTIN 1250 1438 7499 ALLEN 1600 1840 7844 TURNER 1500 1725 7900 JAMES 950 1093 7521 WARD 1250 1438 7902 FORD 3000 3450 7369 SMITH 800 920 7788 SCOTT 3000 3450 7876 ADAMS 1100 1265 7934 MILLER 1300 1495 14 rows selected.

4. Modifique a consulta p3q2.sql para adicionar uma coluna que subtrair o salrio antigo do novo salrio. Coloque um label na coluna Increase. Execute novamente a consulta.
EMPNO ENAME SAL New Salary Increase ----- ------ ----- ---------- -------7839 KING 5000 5750 750 7698 BLAKE 2850 3278 428 7782 CLARK 2450 2818 368 7566 JONES 2975 3421 446 7654 MARTIN 1250 1438 188 7499 ALLEN 1600 1840 240 7844 TURNER 1500 1725 225 7900 JAMES 950 1093 143 . . . 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 3-46

Exerccio 3 (continuao) 5. Exibe o nome do funcionrio, a data de admisso, que a primeira segunda-feira aps seis meses de servio. Coloque um label na coluna REVIEW. Formate as datas que aparecem em formato semelhante a "Sunday, the Seventh of September, 1981".
ENAME ----KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER HIREDATE -------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82 REVIEW -------------------------------------Monday, the Twenty-Fourth of May, 1982 Monday, the Second of November, 1981 Monday, the Fourteenth of December, 1981 Monday, the Fifth of October, 1981 Monday, the Twenty-Ninth of March, 1982 Monday, the Twenty-Fourth of August, 1981 Monday, the Fifteenth of March, 1982 Monday, the Seventh of June, 1982 Monday, the Twenty-Fourth of August, 1981 Monday, the Seventh of June, 1982 Monday, the Twenty-Second of June, 1981 Monday, the Thirteenth of June, 1983 Monday, the Eighteenth of July, 1983 Monday, the Twenty-Sixth of July, 1982

14 rows selected.

6. Para cada funcionrio exiba o nome do mesmo e calcule o nmero de meses entre hoje e a sua data de admisso. Coloque um label na coluna MONTHS_WORKED. Ordene os resultados por nmero de meses empregado. Arredonde para cima o nmero de meses para o nmero inteiro mais prximo.
ENAME ------ADAMS SCOTT MILLER JAMES FORD KING MARTIN TURNER CLARK BLAKE JONES WARD ALLEN SMITH MONTHS_WORKED ------------177 178 188 190 190 191 192 193 196 197 198 199 199 202

14 rows selected

Introduo ao Oracle: SQL e PL/SQL 3-47

Exerccio 3 (continuao) 7. Crie uma consulta que produza as seguintes informaes para cada funcionrio: <nome do funcionrio> recebe <salrio> mensalmente mas deseja <salrio multiplicado por 3>. Coloque um label na coluna.
Dream Salaries ---------------------------------------------------KING earns $5,000.00 monthly but wants $15,000.00. BLAKE earns $2,850.00 monthly but wants $8,550.00. CLARK earns $2,450.00 monthly but wants $7,350.00. JONES earns $2,975.00 monthly but wants $8,925.00. MARTIN earns $1,250.00 monthly but wants $3,750.00. ALLEN earns $1,600.00 monthly but wants $4,800.00 TURNER earns $1,500.00 monthly but wants $4,500.00. JAMES earns $950.00 monthly but wants $2,850.00. WARD earns $1,250.00 monthly but wants $3,750.00. FORD earns $3,000.00 monthly but wants $9,000.00. SMITH earns $800.00 monthly but wants $2,400.00. SCOTT earns $3,000.00 monthly but wants $9,000.00. ADAMS earns $1,100.00 monthly but wants $3,300.00 MILLER earns $1,300.00 monthly but wants $3,900.00. 14 rows selected.

Se voc tiver tempo, complete os exerccios abaixo: 8. Crie uma consulta que exiba o nome e o salrio de todos os funcionrios. Formate o salrio para ter 15 caracteres e apresentar o sinal US$ esquerda. Coloque um label na coluna SALARY.
ENAME SALARY -------- --------------SMITH $$$$$$$$$$$$800 ALLEN $$$$$$$$$$$1600 WARD $$$$$$$$$$$1250 JONES $$$$$$$$$$$2975 MARTIN $$$$$$$$$$$1250 BLAKE $$$$$$$$$$$2850 CLARK $$$$$$$$$$$2450 SCOTT $$$$$$$$$$$3000 KING $$$$$$$$$$$5000 TURNER $$$$$$$$$$$1500 ADAMS $$$$$$$$$$$1100 JAMES $$$$$$$$$$$$950 FORD $$$$$$$$$$$3000 MILLER $$$$$$$$$$$1300 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 3-48

Exerccio 3 (continuao) 9. Crie uma consulta que exibir o nome do funcionrio com a primeira letra maiscula e todas as outras minsculas, bem como o tamanho de seus nomes, para todos os funcionrios cujo nome comea com J, A ou M. Fornea a cada coluna um label apropriado.
Name Length ------- -----Jones 5 Martin 6 Allen 5 James 5 Adams 5 Miller 6 6 rows selected.

10. Exiba o nome, a data de admisso e o dia da semana em que o funcionrio comeou a trabalhar. Coloque um label na coluna DAY. Ordene os resultados por dia da semana, iniciando por Segunda.
ENAME HIREDATE ------ --------MARTIN 28-SEP-81 CLARK 09-JUN-81 KING 17-NOV-81 TURNER 08-SEP-81 SMITH 17-DEC-80 ADAMS 12-JAN-83 JONES 02-APR-81 FORD 03-DEC-81 SCOTT 09-DEC-82 JAMES 03-DEC-81 ALLEN 20-FEB-81 BLAKE 01-MAY-81 MILLER 23-JAN-82 WARD 22-FEB-81 14 rows selected. DAY ----------MONDAY TUESDAY TUESDAY TUESDAY WEDNESDAY WEDNESDAY THURSDAY THURSDAY THURSDAY THURSDAY FRIDAY FRIDAY SATURDAY SUNDAY

Introduo ao Oracle: SQL e PL/SQL 3-49

Exerccio 3 (continuao) Se voc quiser mais desafios, complete os exerccios abaixo: 11. Crie uma consulta que exibir o nome do funcionrio e o valor da comisso. Se o funcionrio no receber comisso, coloque "No Commission". Coloque um label na coluna COMM.
ENAME -----SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER COMM ----------No Commission 300 500 No Commission 1400 No Commission No Commission No Commission No Commission 0 No Commission No Commission No Commission No Commission

14 rows selected.

12. Crie uma consulta que exiba os nomes dos funcionrios e indique as quantias de seus salrios atravs de asteriscos. Cada asterisco representa cem dlares. Classifique os dados em ordem decrescente de salrio. Coloque um label na coluna EMPLOYEE_AND_THEIR_SALARIES.
EMPLOYEE_AND_THEIR_SALARIES ----------------------------------------------------------KING ************************************************** FORD ****************************** SCOTT ****************************** JONES ***************************** BLAKE **************************** CLARK ************************ ALLEN **************** TURNER *************** MILLER ************* MARTIN ************ WARD ************ ADAMS *********** JAMES ********* SMITH ******** 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 3-50

Exerccio 3 (continuao) Se voc quiser mais desafios, complete o exerccio a seguir: 13. Crie uma consulta que exiba o grau para todos os funcionrios com base no valor da coluna JOB, conforme a tabela mostrada abaixo:
JOB PRESIDENT MANAGER ANALYST SALESMAN CLERK None of the above GRADE A B C D E O

JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST SALESMAN CLERK CLERK ANALYST CLERK

GRADE E D D B D B B C D E E C E

--------- -----

PRESIDENT A

14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 3-51

Introduo ao Oracle: SQL e PL/SQL 3-52

4
Exibindo Dados de Vrias Tabelas

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Criar instrues SELECT para obter acesso aos dados a partir de mais de uma tabela usando as junes idnticas e noidnticas Visualizar dados que, em geral, no correspondem a uma condio de juno usando junes externas Unindo uma tabela a ela mesma
4-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Esta lio aborda como obter dados a partir de uma ou mais tabelas, usando diferentes mtodos disponveis.

Introduo ao Oracle: SQL e PL/SQL 4-2

Obtendo Dados de Vrias Tabelas


EMP EMPNO -----7839 7698 ... 7934 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10 DEPT DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON

MILLER ...

EMPNO DEPTNO LOC ----- ------- -------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected.
4-3 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Dados de Vrias Tabelas Algumas vezes necessrio utilizar dados a partir de uma ou mais tabelas. No exemplo do slide, o relatrio exibe dados a partir de duas tabelas separadas. EMPNO existe na tabela EMP. DEPTNO existe nas tabelas EMP e DEPT. LOC existe na tabela DEPT.

Para produzir o relatrio, voc precisa vincular as tabelas EMP e DEPT e ter acesso aos dados das duas.

Introduo ao Oracle: SQL e PL/SQL 4-3

O Que uma Juno?


Use uma juno para consultar dados a partir de uma ou mais tabelas.
SELECT FROM WHERE

tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1.coluna1 = tabela2.coluna2;

Criar uma condio de juno na clusula WHERE. Prefixar o nome da coluna com o nome da tabela quando o mesmo nome da coluna aparecer em mais de uma tabela.
4-4 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Definindo Junes Quando so necessrios dados de uma ou mais tabelas no banco de dados, usa-se uma condio de juno. As linhas de uma tabela podem ser unidas s linhas de outra tabela de acordo com os valores comuns existentes nas colunas correspondentes, isto , em geral colunas de chave primria e estrangeira. Para exibir dados a partir de uma ou mais tabelas relacionadas, crie uma condio de juno simples na clusula WHERE. Na sintaxe: tabela1.coluna tabela1.coluna1 = tabela2.coluna2 denota a tabela e a coluna a partir das quais recupera-se os dados a condio que junta (ou relaciona) tabelas

Diretrizes Ao criar uma instruo SELECT que una tabelas, anteceda o nome da coluna com o nome da tabela a fim de esclarecer e avanar o acesso ao banco de dados. Caso aparea o mesmo nome da coluna em mais de uma tabela, o nome da coluna deve estar prefixado com o nome da tabela. Para juntar n tabelas, necessrio um mnimo de (n-1) condies de juno. Assim, para juntar quatro tabelas, necessrio um mnimo de trs junes. Esta regra pode no se aplicar se sua tabela possuir uma chave primria concatenada, no caso de mais de uma coluna ser necessria para identificar exclusivamente cada linha. Para obter mais informaes, consulte o Oracle Server SQL Reference Manual, Release 8, "SELECT".
Introduo ao Oracle: SQL e PL/SQL 4-4

Produto Cartesiano
Um produto cartesiano formado quando:
Uma condio de juno estiver omitida Uma condio de juno estiver invlida Todas as linhas na primeira tabela esto

unidas a todas as linhas da segunda tabela Para evitar um produto Cartesiano, sempre inclua uma condio de juno vlida em uma clusula WHERE.

4-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Produto Cartesiano Quando uma condio de juno for completamente invlida ou omitida, o resultado um produto Cartesiano no qual sero exibidas todas as combinaes de linhas. Todas as linhas da primeira tabela esto unidas a todas as linhas da segunda. Um produto Cartesiano tende a gerar um grande nmero de linhas e seu resultado raramente til. Voc deve sempre incluir uma condio de juno em uma clusula WHERE, a menos que tenha uma necessidade especfica de combinar todas as linhas de todas as tabelas.

Introduo ao Oracle: SQL e PL/SQL 4-5

Gerando um Produto Cartesiano


EMP (14 linhas) EMPNO -----7839 7698 ... 7934 ENAME ----KING BLAKE ... DEPTNO ... -----... 10 ... 30 10 DEPT (4 linhas) DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON

MILLER ...

"Produto Cartesiano: 14*4=56 linhas"

ENAME DNAME --------------KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected.

4-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Produto Cartesiano (continuao) Gera-se um produto Cartesiano caso uma condio de juno seja omitida. O exemplo do slide exibe o nome do funcionrio e do departamento a partir das tabelas EMP e DEPT. Porque nenhuma clusula WHERE foi especificada, todas as linhas (14 linhas) da tabela EMP so unidas a todas as linhas (4 linhas) na tabela DEPT, gerando dessa forma 56 linhas na sada.
SQL> SELECT 2 FROM ename, dname emp, dept;

ENAME DNAME ---------- -------------KING ACCOUNTING BLAKE ACCOUNTING ... KING RESEARCH BLAKE RESEARCH ... 56 rows selected.

Introduo ao Oracle: SQL e PL/SQL 4-6

Tipos de Junes
Juno idntica Juno no-idntica Juno externa

Autojuno

4-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de Junes H dois tipos principais de condies de juno: Junes idnticas Junes no-idnticas Junes externas Autojunes Operadores de conjunto

Mtodos de juno adicional incluem o seguinte:

Observao: Os operadores de conjunto no so abordados neste curso. Eles so abordados em outro curso SQL.

Introduo ao Oracle: SQL e PL/SQL 4-7

O Que uma Juno Idntica?


EMP EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected. Chave estrangeira
4-8

DEPT DEPTNO ------10 30 10 20 30 30 30 30 30 20 20 ... 14 rows DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH SALES SALES SALES SALES SALES RESEARCH RESEARCH selected. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS

Chave primria

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Junes idnticas Para determinar o nome do departamento de um funcionrio, compare o valor na coluna DEPTNO na tabela EMP com os valores DEPTNO da tabela DEPT. O relacionamento entre as tabelas EMP e DEPT uma juno idntica ou seja, os valores da coluna DEPTNO das duas tabelas devem ser iguais. Com freqncia, essa juno envolve complementos de chave primria e estrangeira. Observao: As junes idnticas tambm so chamadas de junes simples ou junes internas.

Introduo ao Oracle: SQL e PL/SQL 4-8

Recuperando Registros com Junes Idnticas


SQL> SELECT 2 3 FROM 4 WHERE emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc emp, dept emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected.

4-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Recuperando Registros com Junes Idnticas No exemplo do slide: A clusula SELECT especifica os nomes de coluna a recuperar: nome do funcionrio, nmero do funcionrio e nmero do departamento, que so as colunas na tabela EMP nmero do departamento, nome do departamento e localizao, que so as colunas na tabela DEPT A clusula FROM especifica as duas tabelas que o banco de dados deve acessar: tabela EMP tabela DEPT A clusula WHERE especifica como as tabelas sero unidas: EMP.DEPTNO=DEPT.DEPTNO Porque a coluna DEPTNO comum s duas tabelas, ela deve estar prefixada pelo nome da tabela a fim de evitar ambigidade.

Introduo ao Oracle: SQL e PL/SQL 4-9

Qualificando Nomes de Coluna Ambguos


Use os prefixos de tabela para qualificar nomes de coluna que esto em vrias tabelas. Melhore o desempenho usando os prefixos de tabela. Diferencie colunas que possuem nomes idnticos, mas que residam em tabelas diferentes usando apelidos de coluna.

4-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Qualificando Nomes de Coluna Ambguos Voc precisa qualificar os nomes das colunas na clusula WHERE com o nome da coluna a fim de evitar ambigidade. Sem os prefixos de tabela, a coluna DEPTNO pode vir tanto da tabela DEPT quanto da EMP. necessrio adicionar o prefixo da tabela para executar a consulta. Se no houver nenhum nome de coluna comum entre as duas tabelas, no haver necessidade de qualificar as colunas. No entanto, voc obter um melhor desempenho usando o prefixo da tabela, pois informa ao Oracle Server exatamente onde ir para localizar colunas. A necessidade de qualificar nomes de coluna ambguos tambm aplicvel s colunas que podem estar ambguas em outras clusulas, tais como a clusula SELECT ou a ORDER BY.

Introduo ao Oracle: SQL e PL/SQL 4-10

Condies de Pesquisa Adicional Usando o Operador AND


EMP EMPNO ENAME DEPTNO ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected.
4-11

DEPT DEPTNO DNAME ------ --------10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH 30 SALES 30 SALES 30 SALES 30 SALES 30 SALES 20 RESEARCH 20 RESEARCH ... 14 rows selected. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Condies de Pesquisa Adicional Alm da juno, possvel ter critrios para a clusula WHERE. Por exemplo, para exibir o nmero de funcionrio, o nome, o nmero de departamento e a localizao do departamento do funcionrio King, voc precisa de uma condio adicional na clusula WHERE.
SQL> 2 3 4 SELECT FROM WHERE AND empno, ename, emp.deptno, loc emp, dept emp.deptno = dept.deptno INITCAP(ename) = 'King';

EMPNO ENAME DEPTNO LOC --------- ---------- --------- ------------7839 KING 10 NEW YORK

Introduo ao Oracle: SQL e PL/SQL 4-11

Usando Apelidos de Tabela


Simplifique consultas usando apelidos de tabela.
SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno= d.deptno;

4-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Apelidos de Tabela Qualificar nomes de coluna com nomes de tabela pode consumir muito tempo, principalmente se os nomes da tabela forem extensos. Voc pode usar apelidos de tabela no lugar de nomes de tabela. Da mesma forma que um apelido de coluna fornece um outro nome coluna, um apelido de tabela fornece um outro nome tabela. Os apelidos de tabela ajudam a manter o cdigo SQL menor, usando dessa forma menos memria. No exemplo, note como os apelidos de tabela so identificados na clusula FROM. O nome de tabela especificado integralmente, seguido de um espao e, em seguida, do apelido da tabela. A tabela EMP recebeu o apelido E, enquanto a tabela DEPT tem o apelido D. Diretrizes Os apelidos de tabela podem ter um tamanho de at 30 caracteres, porm quanto menores, melhores. Se um apelido de tabela for usado para um determinado nome de tabela na clusula FROM, ento aquele apelido de tabela deve ser substitudo para o nome da tabela em toda a instruo SELECT. Apelidos de tabela devem ser significativos. O apelido de tabela vlido somente para a instruo SELECT atual.

Introduo ao Oracle: SQL e PL/SQL 4-12

Unindo Mais de Duas Tabelas


CUSTOMER NAME CUSTID ---------------JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... ... 9 rows selected. ORD CUSTID ORDID ------- ------101 610 102 611 104 612 106 601 102 602 ITEM 106 604 ORDID ITEMID 106 605 ------ ------... 610 3 21 rows selected. 611 1 612 1 601 1 602 1 ... 64 rows selected.

4-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Condies de Pesquisa Adicional Algumas vezes voc pode precisar unir mais de duas tabelas. Por exemplo, para exibir o nome, a colocao das ordens, os nmeros de item, o total para cada item e o total para cada ordem para o cliente TKB SPORT SHOP, voc ter de unir as tabelas CUSTOMER, ORD e ITEM.
SQL> 2 3 4 5 SELECT FROM WHERE AND AND c.name, o.ordid, i.itemid, i.itemtot, o.total customer c, ord o, item i c.custid = o.custid o.ordid = i.ordid c.name = 'TKB SPORT SHOP';

NAME ORDID ITEMID ITEMTOT TOTAL ------------ --------- --------- --------- --------TKB SPORT SHOP 610 3 58 101.4 TKB SPORT SHOP 610 1 35 101.4 TKB SPORT SHOP 610 2 8.4 101.4

Introduo ao Oracle: SQL e PL/SQL 4-13

Junes No-idnticas
EMP EMPNO ENAME SAL ------ ------- -----7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected. SALGRADE GRADE LOSAL HISAL ----- ----- -----1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

"o salrio na tabela EMP est entre salrio inferior e salrio superior na tabela SALGRADE"

4-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Junes No-Idnticas O relacionamento entre a tabela EMP e a tabela SALGRADE uma juno no-idntica, o que significa que nenhuma coluna da tabela EMP corresponde diretamente a uma coluna da tabela SALGRADE. O relacionamento entre as duas tabelas que a coluna SAL da tabela EMP est entre a coluna LOSAL e HISAL da tabela SALGRADE. O relacionamento obtido usando um outro operador que no o igual (=).

Introduo ao Oracle: SQL e PL/SQL 4-14

Recuperando Registros com Junes No-idnticas


SQL> 2 3 4 SELECT FROM WHERE BETWEEN e.ename, e.sal, s.grade emp e, salgrade s e.sal s.losal AND s.hisal;

ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.

4-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Junes No-Idnticas (continuao) O exemplo do slide cria uma juno no-idntica para avaliar uma classificao de salrio do funcionrio. O salrio deve estar entre qualquer par de faixas salariais inferior ou superior. importante notar que todos os funcionrios aparecem exatamente uma vez quando esta consulta executada. Nenhum funcionrio repetido na lista. H dois motivos para isto: Nenhuma das linhas na tabela de classificao salarial possui classificaes que se sobrepem. Isto , o valor do salrio para um funcionrio pode estar somente entre valores salariais superiores e inferiores de uma das linhas tabela de classificao salarial. Todos os salrios dos funcionrios esto entre limites fornecidos pela tabela de classificao salarial. Ou seja, nenhum funcionrio ganha menos que o valor contido na coluna LOSAL ou mais que o valor mais alto contido na coluna HISAL. Observao: Outros operadores tais como <= e >= podem ser utilizados, porm BETWEEN o mais simples. Lembre-se de especificar o primeiro valor inferior e o ltimo valor superior ao usar BETWEEN. Foram especificados apelidos de tabela por motivos de desempenho, no por causa da possibilidade de ambigidade.

Introduo ao Oracle: SQL e PL/SQL 4-15

Junes Externas
EMP ENAME ----KING BLAKE CLARK JONES ... DEPTNO -----10 30 10 20 DEPT DEPTNO -----10 30 10 20 ... 40 DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH OPERATIONS

Nenhum funcionrio do departamento OPERATIONS

4-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Retornando Registros sem Correspondncia Direta com as Junes Externas Se uma linha no satisfizer uma condio de juno, a linha no aparecer no resultado da consulta. Por exemplo, na condio de juno idntica das tabelas EMP e DEPT, o departamento OPERATIONS no aparece porque ningum trabalha neste departamento.
SQL> SELECT e.ename, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno; ENAME DEPTNO ---------- --------KING 10 BLAKE 30 CLARK 10 JONES 20 ... ALLEN 30 TURNER 30 JAMES 30 ... 14 rows selected. DNAME ------------ACCOUNTING SALES ACCOUNTING RESEARCH SALES SALES SALES

Introduo ao Oracle: SQL e PL/SQL 4-16

Junes Externas
Use uma juno externa para consultar tambm todas as linhas que em geral no atendem condio de juno. O operador de juno externo um sinal de adio (+).
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(+);
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

4-17

Retornando Registros sem Correspondncia Direta com as Junes Externas (continuao) A(s) linha(s) ausente(s) pode(m) ser retornada(s) se um operador de juno externa for utilizado na condio de juno. O operador um sinal de adio entre parnteses (+), e colocado ao "lado" da juno que est com informao insuficiente. Este operador possui o efeito de criar uma ou mais linhas nulas, para qual uma ou mais linhas da tabela no-deficiente pode ser unida. Na sintaxe: tabela1.coluna = tabela2.coluna (+) a condio que une (ou relaciona) as tabelas. o smbolo de juno externa, que pode ser colocado em qualquer lado da condio da clusula WHERE, mas no dos dois lados (Coloque o smbolo de juno externa seguindo o nome da coluna na tabela sem linhas correspondidas.)

Introduo ao Oracle: SQL e PL/SQL 4-17

Usando Junes Externas


SQL> 2 3 4 SELECT FROM WHERE ORDER BY e.ename, d.deptno, d.dname emp e, dept d e.deptno(+) = d.deptno e.deptno;

ENAME DEPTNO DNAME ---------- --------- ------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.

4-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Retornando Registros sem Correspondncia Direta com as Junes Externas (continuao) O exemplo do slide exibe nmeros e nomes para todos os departamentos. O departamento OPERATIONS, que no possui nenhum funcionrio, tambm exibido. Restries da Juno Externa O operador da juno externa pode aparecer somente de um lado da expresso o lado que possui informaes ausentes. Ele retorna estas linhas de uma tabela que no possui correspondncia direta em outra tabela. Uma condio envolvendo uma juno externa no pode usar o operador IN ou estar vinculada a outra condio pelo operador OR.

Introduo ao Oracle: SQL e PL/SQL 4-18

Autojunes
EMP (WORKER) EMPNO ----7839 7698 7782 7566 7654 7499 ENAME -----KING BLAKE CLARK JONES MARTIN ALLEN MGR ---7839 7839 7839 7698 7698 EMP (MANAGER) EMPNO ENAME ----- -------7839 7839 7839 7698 7698 KING KING KING BLAKE BLAKE

"MGR na tabela WORKER igual a EMPNO na tabela MANAGER"

4-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Unindo uma Tabela a Ela Mesma Algumas vezes ser necessrio unir uma tabela a ela mesma. Para localizar o nome do gerente de cada funcionrio, necessrio unir a tabela EMP a ela mesma ou executar uma autojuno. Por exemplo, para localizar o nome do gerente de Blake, necessrio: Localizar Blake na tabela EMP consultando a coluna ENAME. Localizar o nmero do gerente de Blake consultando a coluna MGR. O nmero do gerente de Blake 7839. Localizar o nome do gerente como o EMPNO 7839 consultando a coluna ENAME. O nmero do funcionrio King 7839, ento King gerente de Blake.

Neste processo, voc analisa a tabela duas vezes. Na primeira vez, voc consulta a tabela para localizar Blake na coluna ENAME e o valor MGR de 7839. Na segunda vez, voc consulta a coluna EMPNO para localizar 7839 e a coluna ENAME para localizar King.

Introduo ao Oracle: SQL e PL/SQL 4-19

Unindo uma Tabela a Ela Mesma


SQL> SELECT worker.ename||' works for '||manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;

WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected.

4-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Unindo uma Tabela a Ela Mesma (continuao) O exemplo do slide une a tabela EMP a ela mesma. Para simular duas tabelas na clusula FROM, h dois apelidos, chamados WORKER e MANAGER, para a mesma tabela EMP. Neste exemplo, a clusula WHERE contm a juno que significa "em que lugar o nmero de gerente do trabalhador corresponde ao nmero do funcionrio para o gerente".

Introduo ao Oracle: SQL e PL/SQL 4-20

Sumrio
SELECT FROM WHERE

tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1.coluna1 = tabela2.coluna2;

Juno idntica

Juno no-idntica

Juno externa

Autojuno

4-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio H vrios modos para juntar tabelas. O elemento comum, no entanto, aquele que deseja vincular atravs de uma condio na clusula WHERE. O mtodo que voc escolher ser baseado nas estruturas de dados que estiver usando.
SELECT FROM WHERE

tabela1.coluna, tabela2.coluna tabela1, tabela2 tabela1.coluna1 = tabela2.coluna2;

Introduo ao Oracle: SQL e PL/SQL 4-21

Viso Geral do Exerccio

Unindo tabelas usando uma juno idntica Executando junes externas e autojunes Adicionando condies

4-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Este exerccio tem como objetivo fornecer a voc experincia para extrair dados de mais de uma tabela. Voc ser solicitado para unir e restringir linhas na clusula WHERE.

Introduo ao Oracle: SQL e PL/SQL 4-22

Exerccio 4 1. Crie uma consulta para exibir o nome, o nmero e o nome do departamento de todos os funcionrios.
ENAME DEPTNO DNAME ------ ------ --------KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING JONES 20 RESEARCH MARTIN 30 SALES ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES WARD 30 SALES FORD 20 RESEARCH SMITH 20 RESEARCH SCOTT 20 RESEARCH ADAMS 20 RESEARCH MILLER 10 ACCOUNTING 14 rows selected.

2. Crie uma lista nica de todos os cargos existentes no departamento 30. Inclua a localizao do departamento 30 na sada.
JOB --------CLERK MANAGER SALESMAN LOC ------------CHICAGO CHICAGO CHICAGO

3. Crie uma consulta para exibir o nome do funcionrio, o nome do departamento e a localizao de todos os funcionrios que recebem uma comisso.
ENAME -----ALLEN WARD MARTIN TURNER DNAME -----SALES SALES SALES SALES LOC ------------CHICAGO CHICAGO CHICAGO CHICAGO

Introduo ao Oracle: SQL e PL/SQL 4-23

Exerccio 4 (continuao) 4. Exiba o nome do funcionrio e o nome do departamento para todos os funcionrios que possuem um A em seus nomes. Salve a instruo SQL no arquivo nomeado p4q4.sql.
ENAME DNAME ------- -----------BLAKE SALES CLARK ACCOUNTING MARTIN SALES ALLEN SALES JAMES SALES WARD SALES ADAMS RESEARCH 7 rows selected.

5. Crie uma consulta para exibir o nome, o cargo, o nmero e o nome do departamento para todos os funcionrios que trabalham em DALLAS.
ENAME ------SMITH ADAMS FORD SCOTT JONES JOB DEPTNO ------- ------CLERK 20 CLERK 20 ANALYST 20 ANALYST 20 MANAGER 20 DNAME ---------RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH

Introduo ao Oracle: SQL e PL/SQL 4-24

Exerccio 4 (continuao) 6. Exiba o nome e o nmero do funcionrio junto com o nome e o nmero do gerente. Coloque um label nas colunas Employee, Emp#, Manager e Mgr#, respectivamente. Salve a instruo SQL em um arquivo nomeado p4q6.sql.
Employee Emp# Manager -------- ------ ------SCOTT 7788 JONES FORD 7902 JONES ALLEN 7499 BLAKE WARD 7521 BLAKE JAMES 7900 BLAKE TURNER 7844 BLAKE MARTIN 7654 BLAKE MILLER 7934 CLARK ADAMS 7876 SCOTT JONES 7566 KING CLARK 7782 KING BLAKE 7698 KING SMITH 7369 FORD 13 rows selected. Mgr# ---7566 7566 7698 7698 7698 7698 7698 7782 7788 7839 7839 7839 7902

7. Modifique o p4q6.sql para exibir todos os funcionrios incluindo King, que no possuem um gerente. Salve-o novamente como p4q7.sql. Execute o p4q7.sql.
Employee Emp# Manager Mgr# -------- ------ ------- ----SCOTT 7788 JONES 7566 FORD 7902 JONES 7566 ALLEN 7499 BLAKE 7698 WARD 7521 BLAKE 7698 JAMES 7900 BLAKE 7698 TURNER 7844 BLAKE 7698 MARTIN 7654 BLAKE 7698 MILLER 7934 CLARK 7782 ADAMS 7876 SCOTT 7788 JONES 7566 KING 7839 CLARK 7782 KING 7839 BLAKE 7698 KING 7839 SMITH 7369 FORD 7902 KING 7839 14 rows selected.

Introduo ao Oracle: SQL e PL/SQL 4-25

Exerccio 4 (continuao) Se voc tiver tempo, complete os exerccios abaixo: 8. Crie uma consulta que exibir o nome do funcionrios, o nmero do departamento e todos os funcionrios que trabalham no mesmo departamento de um determinado funcionrio. Fornea a cada coluna um label apropriado.
DEPARTMENT ---------10 10 10 10 10 10 20 20 20 20 20 20 20 EMPLOYEE -------CLARK CLARK KING KING MILLER MILLER ADAMS ADAMS ADAMS ADAMS FORD FORD FORD COLLEAGUE --------KING MILLER CLARK MILLER CLARK KING FORD JONES SCOTT SMITH ADAMS JONES SCOTT

... 56 rows selected.

Introduo ao Oracle: SQL e PL/SQL 4-26

Exerccio 4 (continuao) 9. Mostre a estrutura da tabela SALGRADE. Crie uma consulta que exiba o nome, o cargo, o nome do departamento, o salrio e a classificao de todos os funcionrios.
Name Null? ----------- -------GRADE LOSAL HISAL ENAME -----MILLER CLARK KING SMITH SCOTT FORD ADAMS JONES JAMES BLAKE TURNER ALLEN WARD MARTIN 14 rows JOB ---------CLERK MANAGER PRESIDENT CLERK ANALYST ANALYST CLERK MANAGER CLERK MANAGER SALESMAN SALESMAN SALESMAN SALESMAN selected. Type ------NUMBER NUMBER NUMBER GRADE ----2 4 5 1 4 4 1 4 1 4 3 3 2 2

DNAME SAL ---------- ----ACCOUNTING 1300 ACCOUNTING 2450 ACCOUNTING 5000 RESEARCH 800 RESEARCH 3000 RESEARCH 3000 RESEARCH 1100 RESEARCH 2975 SALES 950 SALES 2850 SALES 1500 SALES 1600 SALES 1250 SALES 1250

Introduo ao Oracle: SQL e PL/SQL 4-27

Exerccio 4 (continuao) Se voc quiser mais desafios, complete os exerccios abaixo: 10. Crie uma consulta para exibir o nome e a data de admisso de qualquer funcionrio admitido aps o funcionrio Blake.
ENAME HIREDATE ------- --------KING 17-NOV-81 CLARK 09-JUN-81 MARTIN 28-SEP-81 TURNER 08-SEP-81 JAMES 03-DEC-81 FORD 03-DEC-81 SCOTT 09-DEC-82 ADAMS 12-JAN-83 MILLER 23-JAN-82 9 rows selected.

11. Exiba todos os nomes de funcionrios e as datas de admisso junto com o nome e a data de admisso do gerente para todos os funcionrios admitidos antes de seus gerentes. Coloque um label nas colunas Employee, Emp Hiredate, Manager e Mgr Hiredate, respectivamente.
Employee Emp Hiredate -------- ------------ALLEN 20-FEB-81 WARD 22-FEB-81 JONES 02-APR-81 CLARK 09-JUN-81 BLAKE 01-MAY-81 SMITH 17-DEC-80 6 rows selected. Manager ------BLAKE BLAKE KING KING KING FORD Mgr Hiredate -----------01-MAY-81 01-MAY-81 17-NOV-81 17-NOV-81 17-NOV-81 03-DEC-81

Introduo ao Oracle: SQL e PL/SQL 4-28

5
Agregando Dados Usando Funes de Grupo

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Identificar as funes de grupo disponveis Descrever o uso de funes de grupo Agrupar dados usando a clusula GROUP BY Incluir ou excluir linhas agrupadas usando a clusula HAVING

5-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Esta lio aborda funes. Visa obter informaes sumariadas, tais como mdias, para grupos de linhas. Discute como agrupar linhas de uma tabela em conjuntos menores e como especificar critrios de pesquisa para grupos de linhas.

Introduo ao Oracle: SQL e PL/SQL 5-2

O Que So Funes de Grupo?


As funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo.
EMP DEPTNO SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250
5-3

"salrio mximo na tabela EMP"

MAX(SAL) --------5000

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo De modo diferente das funes de uma nica linha, as funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. Esses conjuntos podem ser a tabela inteira ou a tabela dividida em grupos.

Introduo ao Oracle: SQL e PL/SQL 5-3

Tipos de Funes de Grupo


AVG COUNT MAX MIN STDDEV SUM VARIANCE

5-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo (continuao) Cada uma das funes aceita um argumento. A tabela a seguir identifica as opes que podem ser usadas na sintaxe:
Funo AVG([DISTINCT|ALL]n) COUNT({*|[DISTINCT|ALL]expr}) Descrio Valor mdio de n, ignorando valores nulos Nmero de linhas, onde expr avalia para algo diferente de nulo (Conte todas as linhas selecionadas usando *, inclusive duplicadas e linhas com nulos.) Valor mximo de expr, ignorando valores nulos Valor mnimo de expr, ignorando valores nulos Desvio padro de n, ignorando valores nulos Valores somados de n, ignorando valores nulos Variao de n, ignorando valores nulos

MAX([DISTINCT|ALL]expr) MIN([DISTINCT|ALL]expr) STDDEV([DISTINCT|ALL]x) SUM([DISTINCT|ALL]n) VARIANCE([DISTINCT|ALL]x)

Introduo ao Oracle: SQL e PL/SQL 5-4

Usando Funes de Grupo

SELECT FROM [WHERE [GROUP BY [ORDER BY

[coluna,] group_function(coluna) tabela condio] coluna] coluna];

5-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes para o Uso de Funes de Grupo DISTINCT faz com que a funo considere somente valores no-duplicados; ALL faz com que ela considere cada valor, inclusive duplicados. O default ALL e, portanto, no precisa ser especificado. Os tipos de dados para os argumentos podem ser CHAR, VARCHAR2, NUMBER ou DATE, onde expr est listado. Todas as funes de grupo, exceto COUNT(*), ignoram valores nulos. Para substituir um valor por valores nulos, use a funo NVL. O Oracle Server classifica implicitamente a definio do resultado em ordem crescente quando usa uma clusula GROUP BY. Para sobrepor essa ordenao default, DESC pode ser usado em uma clusula ORDER BY.

Introduo ao Oracle: SQL e PL/SQL 5-5

Usando Funes AVG e SUM


Voc pode usar AVG e SUM para dados numricos.
SQL> SELECT 2 3 FROM 4 WHERE AVG(sal), MAX(sal), MIN(sal), SUM(sal) emp job LIKE 'SALES%';

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------1400 1600 1250 5600

5-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo Voc pode usar as funes AVG, SUM, MIN e MAX com colunas que possam armazenar dados numricos. O exemplo no slide exibe os salrios maior, mdio, menor e a soma dos salrios mensais de todos os vendedores.

Introduo ao Oracle: SQL e PL/SQL 5-6

Usando Funes MIN e MAX


Voc pode usar MIN e MAX para qualquer tipo de dados.
SQL> SELECT 2 FROM MIN(hiredate), MAX(hiredate) emp;

MIN(HIRED MAX(HIRED --------- --------17-DEC-80 12-JAN-83

5-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo (continuao) Voc pode usar as funes MAX e MIN para qualquer tipo de dados. O exemplo no slide exibe o funcionrio mais antigo e o mais novo. O exemplo a seguir exibe o primeiro e o ltimo nome de funcionrio em uma lista alfabtica de todos os funcionrios.
SQL> SELECT 2 FROM MIN(ename), MAX(ename) emp;

MIN(ENAME) MAX(ENAME) ---------- ---------ADAMS WARD

Observao: As funes AVG, SUM, VARIANCE e STDDEV s podem ser usadas com tipos de dados numricos.

Introduo ao Oracle: SQL e PL/SQL 5-7

Usando a Funo COUNT


COUNT(*) retorna o nmero de linhas em uma tabela.
SQL> SELECT 2 FROM 3 WHERE COUNT(*) --------6 COUNT(*) emp deptno = 30;

5-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Funo COUNT A Funo COUNT tem dois formatos: COUNT(*) COUNT(expr)

COUNT(*) retorna o nmero de linhas em uma tabela, inclusive linhas duplicadas e linhas contendo valores nulos em qualquer uma das colunas. Se uma clusula WHERE estiver includa na instruo SELECT, COUNT(*) retornar o nmero de linhas que satisfizer a condio na clusula WHERE. Entretanto, COUNT(expr) retorna o nmero de linhas no nulas na coluna identificada por expr. O exemplo no slide exibe o nmero de funcionrios no departamento 30.

Introduo ao Oracle: SQL e PL/SQL 5-8

Usando a Funo COUNT


COUNT(expr) retorna o nmero de linhas no nulas.
SQL> SELECT 2 FROM 3 WHERE COUNT(comm) emp deptno = 30;

COUNT(COMM) ----------4

5-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Funo COUNT (continuao) O exemplo no slide exibe o nmero de funcionrios no departamento 30 que podem receber uma comisso. Observe que o resultado fornece o nmero total de quatro linhas porque dois funcionrios no departamento 30 no podem receber a comisso e, portanto, a coluna COMM contm um valor nulo. Exemplo Exiba o nmero de departamentos na tabela EMP.
SQL> SELECT 2 FROM COUNT(DEPTNO) ------------14 COUNT(deptno) emp;

Exiba o nmero de departamentos distintos na tabela EMP.


SQL> SELECT 2 FROM COUNT(DISTINCT (deptno)) emp;

COUNT(DISTINCT(DEPTNO)) ----------------------3

Introduo ao Oracle: SQL e PL/SQL 5-9

Funes de Grupo e Valores Nulos


As funes de grupo ignoram valores nulos na coluna.
SQL> SELECT AVG(comm) 2 FROM emp;

AVG(COMM) --------550

5-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo e Valores Nulos Todas as funes de grupo, com a exceo de COUNT (*), ignoram valores nulos na coluna. No exemplo do slide, a mdia calculada com base somente nas linhas da tabela em que um valor vlido armazenado na coluna COMM. A mdia calculada como o total da comisso sendo paga a todos os funcionrios dividido pelo nmero de funcionrios recebendo a comisso (4).

Introduo ao Oracle: SQL e PL/SQL 5-10

Usando a Funo NVL com Funes de Grupo


A funo NVL fora as funes de grupo a inclurem valores nulos.
SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp; AVG(NVL(COMM,0)) ---------------157.14286

5-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Funes de Grupo e Valores Nulos (continuao) A funo NVL fora as funes de grupo a inclurem valores nulos. No exemplo do slide, a mdia calculada com base em todas as linhas na tabela, independentemente de os valores nulos estarem armazenados na coluna COMM. A mdia calculada como o total da comisso sendo paga a todos os funcionrios dividido pelo nmero total de funcionrios na empresa (14).

Introduo ao Oracle: SQL e PL/SQL 5-11

Criando Grupos de Dados


EMP DEPTNO SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

2916.6667

DEPTNO AVG(SAL) "salrio mdio ------- --------na tabela 2175 10 2916.6667 EMP para cada 20 2175 departamento" 30 1566.6667
1566.6667

5-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Grupos de Dados At este momento, todas as funes de grupo trataram a tabela como um grande grupo de informaes. s vezes, necessrio dividir a tabela de informaes em grupos menores. Isso pode ser feito usando a clusula GROUP BY.

Introduo ao Oracle: SQL e PL/SQL 5-12

Criando Grupos de Dados: Clusula GROUP BY


SELECT FROM [WHERE [GROUP BY [ORDER BY

coluna, group_function(coluna) tabela condio] group_by_expression] coluna];

Divida linhas de uma tabela em grupos menores usando a clusula GROUP BY.

5-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula GROUP BY Voc pode usar a clusula GROUP BY para dividir as linhas de uma tabela em grupos. Em seguida, pode usar as funes de grupo para retornar informaes sumrias para cada grupo. Na sintaxe: group_by_expression Diretrizes Se voc incluir uma funo de grupo em uma clusula SELECT, no poder selecionar resultados individuais, a menos que a coluna individual aparea na clusula GROUP BY. Se voc no conseguir incluir a lista de colunas, uma mensagem de erro ser exibida. Ao usar uma clusula WHERE, voc pode excluir linhas com antecedncia antes de dividi-las em grupos. Voc deve incluir as colunas na clusula GROUP BY. No possvel usar o apelido de coluna na clusula GROUP BY. Por default, as linhas so classificadas por ordem crescente das colunas includas na lista GROUP BY. Isso pode ser sobreposto usando a clusula ORDER BY. especifica colunas cujos valores determinam a base para agrupar linhas

Introduo ao Oracle: SQL e PL/SQL 5-13

Usando a Clusula GROUP BY


Todas as colunas na lista SELECT que no estejam em funes de grupo devem estar na clusula GROUP BY.
SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno; DEPTNO AVG(SAL) --------- --------10 2916.6667 20 2175 30 1566.6667

5-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula GROUP BY (continuao) Quando utilizar a clusula GROUP BY, certifique-se de que todas as colunas na lista SELECT que no estejam nas funes de grupo estejam includas na clusula GROUP BY. O exemplo no slide exibe o nmero do departamento e o salrio mdio para cada departamento. Essa instruo SELECT, que contm uma clusula GROUP BY, avaliada da seguinte forma: A clusula SELECT especifica as colunas a serem recuperadas: A coluna de nmeros de departamento na tabela EMP A mdia de todos os salrios no grupo que voc especificou na clusula GROUP BY

A clusula FROM especifica as tabelas que o banco de dados deve acessar: a tabela EMP. A clusula WHERE especifica as linhas a serem recuperadas. J que no h uma clusula WHERE, todas as linhas so recuperadas por default. A clusula GROUP BY especifica como as linhas devem ser agrupadas. As linhas so agrupadas pelo nmero do departamento, de forma que a funo AVG que esteja sendo aplicada coluna de salrios calcule o salrio mdio para cada departamento.

Introduo ao Oracle: SQL e PL/SQL 5-14

Usando a Clusula GROUP BY


A coluna GROUP BY no precisa estar na lista SELECT.
SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL) --------2916.6667 2175 1566.6667

5-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula GROUP BY (continuao) A coluna GROUP BY no precisa estar na clusula SELECT. Por exemplo, a instruo SELECT no slide exibe os salrios mdios para cada departamento sem exibir os respectivos nmeros dos departamentos. Sem os nmeros dos departamentos, entretanto, os resultados no parecem significativos. Voc pode usar a funo de grupo na clusula ORDER BY.
SQL> 2 3 4 SELECT FROM GROUP BY ORDER BY deptno, AVG(sal) emp deptno AVG(sal);

DEPTNO AVG(SAL) ---------- -----------30 1566.6667 20 2175 10 2916.6667

Introduo ao Oracle: SQL e PL/SQL 5-15

EMP

Agrupando por Mais de Uma Coluna


SUM(SAL) DEPTNO JOB -------- --------- --------1300 10 CLERK 2450 10 MANAGER PRESIDENT ANALYST CLERK MANAGER 30 CLERK 30 MANAGER 30 SALESMAN 10 20 20 20 5000 6000 1900 2975 950 2850 5600

DEPTNO JOB SAL --------- --------- --------10 MANAGER 2450 10 10 20 20 20 20 20 30 30 30 30 30 30


5-16

PRESIDENT CLERK CLERK CLERK ANALYST ANALYST MANAGER SALESMAN MANAGER SALESMAN CLERK SALESMAN SALESMAN

5000 1300 800 1100 3000 3000 2975 1600 2850 1250 950 1500 1250

"soma de salrios na tabela EMP para cada cargo, agrupados por departamento"

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Grupos Dentro de Grupos s vezes h necessidade de ver os resultados para grupos dentro de grupos. O slide mostra um relatrio que exibe o salrio total sendo pago a cada cargo, dentro de cada departamento. A tabela EMP agrupada primeiro pelo nmero do departamento e, dentro desse agrupamento, agrupada pelo cargo. Por exemplo, os dois escriturrios no departamento 20 esto agrupados e um nico resultado (salrio total) produzido para todos os vendedores dentro do grupo.

Introduo ao Oracle: SQL e PL/SQL 5-16

Usando a Clusula GROUP BY em Vrias Colunas


SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job; DEPTNO JOB SUM(SAL) --------- --------- --------10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 ... 9 rows selected.

5-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Grupos Dentro de Grupos (continuao) possvel retornar resultados sumrios para grupos e subgrupos listando mais de uma coluna GROUP BY. Voc pode determinar a ordem de classificao default dos resultados pela ordem das colunas na clusula GROUP BY. A instruo SELECT no slide, que contm uma clusula GROUP BY, avaliada da seguinte forma: A clusula SELECT especifica a coluna a ser recuperada: O nmero do departamento na tabela EMP O cargo na tabela EMP A soma de todos os salrios no grupo que voc especificou na clusula GROUP BY

A clusula FROM especifica as tabelas que o banco de dados deve acessar: a tabela EMP. A clusula GROUP BY especifica como voc deve agrupar as linhas: Primeiro, as linhas so agrupadas pelo nmero do departamento Em seguida, dentro dos grupos de nmeros de departamentos, as linhas so agrupadas pelo cargo

Dessa forma, a funo SUM aplicada coluna de salrios para todos os cargos dentro de cada grupo de nmeros de departamentos.

Introduo ao Oracle: SQL e PL/SQL 5-17

Consultas Ilegais Usando Funes de Grupo


Qualquer coluna ou expresso na lista SELECT que no seja uma funo agregada deve estar na clusula GROUP BY.
SQL> SELECT 2 FROM

C SELECT deptno, COUNT(ename) * ERROR at line 1: ORA-00937: Nenhuma funo de grupo de grupo nico (Not a single-group group function)
5-18 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

olu

UP BY sula GRO e na clu a ausent n

deptno, COUNT(ename) emp;

Consultas Ilegais Usando Funes de Grupo Sempre que voc usar uma mistura de itens individuais (DEPTNO) e funes de grupo (COUNT) na mesma instruo SELECT, deve incluir uma clusula GROUP BY que especifique os itens individuais (neste caso, DEPTNO). Se a clusula GROUP BY estiver ausente, aparecer a mensagem de erro "Nenhuma funo de grupo de grupo nico" e um asterisco (*) apontar para a coluna que contiver o erro. Voc pode corrigir o erro no slide ao adicionar a clusula GROUP BY. SQL> SELECT deptno,COUNT(ename) 2 FROM emp 3 GROUP BY deptno;
DEPTNO COUNT(ENAME) ---------- -----------10 3 20 5 30 6 Qualquer coluna ou expresso na lista SELECT que no seja uma funo agregada deve estar na clusula GROUP BY.

Introduo ao Oracle: SQL e PL/SQL 5-18

Consultas Ilegais Usando Funes de Grupo


No possvel usar a clusula WHERE para restringir grupos. Use a clusula HAVING para restringir grupos.
SQL> 2 3 4

ula us os l a c grup ar us ingir l ve estr WHERE AVG(sal) > 2000 ss * po ara r ERROR at line 3: o RE p N ORA-00934: A funo de E grupo no permitida aqui WH (Group function is not allowed here)
SELECT FROM WHERE GROUP BY deptno, AVG(sal) emp AVG(sal) > 2000 deptno;
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

5-19

Consultas Ilegais Usando Funes de Grupo (continuao) A clusula WHERE no pode ser usada para restringir grupos. A instruo SELECT no slide resulta em um erro porque usa a clusula WHERE para restringir a exibio de salrios mdios dos departamentos que tenham um salrio mdio maior do que US$ 2.000. Voc pode corrigir o erro no slide usando a clusula HAVING para restringir grupos.
SQL> 2 3 4 SELECT FROM GROUP BY HAVING deptno, AVG(sal) emp deptno AVG(sal) > 2000;

DEPTNO AVG(SAL) ---------- -------------10 2916.6667 20 2175

Introduo ao Oracle: SQL e PL/SQL 5-19

Excluindo Resultados do Grupo


EMP
DEPTNO SAL --------- --------10 10 10 20 20 20 20 20 30 30 30 30 30 30 2450 5000 1300 800 1100 3000 3000 2975 1600 2850 1250 950 1500 1250

5000 "salrio mximo por departamento maior do que US$ 2.900"

3000

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

2850

5-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Restringindo Resultados do Grupo Da mesma forma que voc usa a clusula WHERE para restringir as linhas que seleciona, pode usar a clusula HAVING para restringir grupos. Para localizar o salrio mximo de cada departamento, mas mostrar apenas os departamentos que tenham um salrio mximo de mais do que US$ 2.900, faa o seguinte: Localize o salrio mdio para cada departamento ao agrupar por nmero do departamento. Restrinja os grupos aos departamentos com um salrio mximo maior do que US$ 2.900.

Introduo ao Oracle: SQL e PL/SQL 5-20

Excluindo Resultados do Grupo: Clusula HAVING


Use a clusula HAVING para restringir grupos As linhas so agrupadas. A funo de grupo aplicada. Os grupos que correspondem clusula HAVING so exibidos.
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY
5-21

coluna, group_function tabela condio] group_by_expression] group_condition] coluna];

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula HAVING Use a clusula HAVING para especificar quais grupos sero exibidos. Portanto, restrinja ainda mais os grupos com base nas informaes agregadas. Na sintaxe: group_condition restringe os grupos de linhas retornados aos grupos para os quais a condio especificada seja TRUE

O Oracle Server executa as seguintes etapas quando voc usa a clusula HAVING: As linhas so agrupadas. A funo de grupo aplicada ao grupo. Os grupos que correspondem aos critrios na clusula HAVING so exibidos.

A clusula HAVING pode preceder a clusula GROUP BY, mas recomenda-se que voc coloque a clusula GROUP BY primeiro, por ser mais lgico. Os grupos so formados e as funes de grupo so calculadas antes de a clusula HAVING ser aplicada aos grupos na lista SELECT.

Introduo ao Oracle: SQL e PL/SQL 5-21

Usando a Clusula HAVING


SQL> 2 3 4 SELECT FROM GROUP BY HAVING deptno, max(sal) emp deptno max(sal)>2900;

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

5-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula HAVING (continuao) O exemplo no slide exibe nmeros de departamentos e o salrio mximo para os departamentos cujo salrio mximo seja maior do que US$ 2.900. Voc pode usar a clusula GROUP BY sem usar uma funo de grupo na lista SELECT. Se voc restringir linhas baseado no resultado de uma funo de grupo, deve ter uma clusula GROUP BY assim como a clusula HAVING. O exemplo a seguir exibe os nmeros de departamentos e o salrio mdio para os departamentos cujo salrio mximo seja maior do que US$ 2.900:
SQL> 2 3 4 SELECT FROM GROUP BY HAVING deptno, AVG(sal) emp deptno MAX(sal) > 2900;

DEPTNO AVG(SAL) --------- --------10 2916.6667 20 2175

Introduo ao Oracle: SQL e PL/SQL 5-22

Usando a Clusula HAVING


SQL> 2 3 4 5 6 SELECT FROM WHERE GROUP BY HAVING ORDER BY job, SUM(sal) PAYROLL emp job NOT LIKE 'SALES%' job SUM(sal)>5000 SUM(sal);

JOB PAYROLL --------- --------ANALYST 6000 MANAGER 8275

5-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Clusula HAVING (continuao) O exemplo no slide exibe o cargo e o salrio mensal total para cada cargo com uma folha de pagamento total excedendo US$ 5.000. O exemplo exclui vendedores e classifica a lista pelo salrio mensal total.

Introduo ao Oracle: SQL e PL/SQL 5-23

Aninhando Funes de Grupo


Exiba o salrio mdio mximo.
SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno; MAX(AVG(SAL)) ------------2916.6667

5-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Aninhando Funes de Grupo As funes de grupo podem ser aninhadas at uma profundidade de dois. O exemplo no slide exibe o salrio mdio mximo.

Introduo ao Oracle: SQL e PL/SQL 5-24

Sumrio
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

coluna, group_function(coluna) tabela condio] group_by_expression] group_condition] coluna];

Ordem de avaliao das clusulas: clusula WHERE clusula GROUP BY clusula HAVING

5-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio Sete funes de grupo esto disponveis no SQL: AVG COUNT MAX MIN SUM STDDEV VARIANCE

Voc pode criar subgrupos usando a clusula GROUP BY. Os grupos podem ser excludos usando a clusula HAVING. Coloque as clusulas HAVING e GROUP BY aps a clusula WHERE em uma instruo. Coloque a clusula ORDER BY por ltimo. O Oracle Server avalia as clusulas na seguinte ordem: Se a instruo contm uma clusula WHERE, o servidor estabelece as linhas do candidato. O servidor identifica os grupos especificados na clusula GROUP BY. A clusula HAVING restringe ainda mais os grupos de resultado que no atendam aos critrios do grupo na clusula HAVING.
Introduo ao Oracle: SQL e PL/SQL 5-25

Viso Geral do Exerccio

Mostrando diferentes consultas que usam funes de grupo Agrupando por linhas para obter mais de um resultado Excluindo grupos usando a clusula HAVING

5-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Ao final desse exerccio, voc dever estar familiarizado com o uso de funes de grupo e a seleo de grupos de dados. Questes Impressas No caso das questes 13, marque Verdadeiro ou Falso. Observao: Os apelidos de colunas so usados para as consultas.

Introduo ao Oracle: SQL e PL/SQL 5-26

Exerccio 5 Determine a validade das afirmaes a seguir. Marque Verdadeiro ou Falso. 1. As funes de grupo operam em muitas linhas para produzir um resultado por grupo. Verdadeiro/Falso 2. As funes de grupo incluem nulos nos clculos. Verdadeiro/Falso 3. A clusula WHERE restringe as linhas antes da incluso em um clculo de grupo. Verdadeiro/Falso 4. Exiba os salrios maior, mdio, menor e a soma de todos os salrios de todos os funcionrios. Coloque um label nas colunas Maximum, Minimum, Sum e Average, respectivamente. Arredonde os resultados para o nmero inteiro mais prximo. Salve a instruo SQL em um arquivo chamado p5q4.sql.
Maximum ------5000 Minimum ------800 Sum Average ----- ------29025 2073

5. Modifique o p5q4.sql para exibir o salrio maior, mdio, menor e a soma de todos os salrios para cada tipo de cargo. Salve novamente o arquivo com o nome p5q5.sql. Execute novamente a consulta.
JOB Maximum Minimum Sum Average ---------- -------- -------- ----- -------ANALYST 3000 3000 6000 3000 CLERK 1300 800 4150 1038 MANAGER 2975 2450 8275 2758 PRESIDENT 5000 5000 5000 5000 SALESMAN 1600 1250 5600 1400

6. Crie uma consulta para exibir o nmero de pessoas com o mesmo cargo.
JOB COUNT(*)

---------- -------ANALYST 2 CLERK 4 MANAGER 3 PRESIDENT 1 SALESMAN 4

Introduo ao Oracle: SQL e PL/SQL 5-27

Exerccio 5 (continuao) 7. Determine o nmero de gerentes sem list-los. Coloque um label na coluna Number of Managers.
Number of Managers -----------------6

8. Crie uma consulta para exibir a diferena entre os maiores e menores salrios. Coloque um label na coluna DIFFERENCE.
DIFFERENCE ---------4200

Se voc tiver tempo, complete os exerccios abaixo: 9. Exiba o nmero do gerente e o salrio do funcionrio com menor pagamento sob a superviso desse gerente. Exclua todos cujo gerente no seja conhecido. Exclua todos os grupos em que o salrio mnimo seja menor do que US$ 1.000. Classifique a sada em ordem decrescente de salrio.
MGR -------7566 7839 7782 7788 MIN(SAL) -------3000 2450 1300 1100

10. Crie uma consulta para exibir o nome do departamento, o nome do local, o nmero de funcionrios e o salrio mdio de todos os funcionrios nesse departamento. Coloque um label nas colunas dname, loc, Number of People e Salary, respectivamente. Arredonde o salrio mdio para duas casas decimais
DNAME -----------ACCOUNTING RESEARCH SALES LOC Number of People --------- ---------------NEW YORK 3 DALLAS 5 CHICAGO 6 Salary -------2916.67 2175 1566.67

Introduo ao Oracle: SQL e PL/SQL 5-28

Exerccio 5 (continuao) Se voc quiser mais desafios, complete os exerccios abaixo: 11. Crie uma consulta que exiba o nmero total de funcionrios e, desse total, o nmero total de funcionrios contratados em 1980, 1981, 1982 e 1983. Coloque os cabealhos apropriados nas colunas.
TOTAL 1980 ----- ----14 1 1981 ----10 1982 1983 ----- ----2 1

12.

Crie uma consulta matriz para exibir o cargo, o salrio desse cargo baseado no nmero do departamento e o salrio total desse cargo para todos os departamentos, colocando em cada coluna um cabealho apropriado.
Job Dept 10 --------- ------ANALYST CLERK 1300 MANAGER 2450 PRESIDENT 5000 SALESMAN Dept 20 Dept 30 Total -------- -------- ------6000 6000 1900 950 4150 2975 2850 8275 5000 5600 5600

Introduo ao Oracle: SQL e PL/SQL 5-29

Introduo ao Oracle: SQL e PL/SQL 5-30

6
Subconsultas

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, 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 vrias linhas

6-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender sobre os recursos mais avanados da instruo SELECT. Voc pode criar subconsultas na clusula WHERE de outra instruo SQL para obter valores baseados em um valor condicional desconhecido. Esta lio abrange as subconsultas de uma nica linha e de vrias linhas.

Introduo ao Oracle: SQL e PL/SQL 6-2

Usando uma Subconsulta para Resolver um Problema


"Quem tem um salrio maior que o de Jones?"
Consulta principal

"Que funcionrios tm um salrio maior que o salrio de Jones?"


Subconsulta

"Qual o salrio de Jones?"

6-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta para Resolver um Problema Suponha que voc deseje criar uma consulta para descobrir quem recebe um salrio maior que o de Jones. Para resolver esse problema, so necessrias duas consultas: uma consulta para descobrir quanto Jones recebe e outra para descobrir quem recebe mais que essa quantia. Voc pode resolver esse problema combinando as duas consultas, colocando uma consulta dentro da outra consulta. A consulta interna ou a subconsulta retorna um valor que usado pela consulta externa ou pela consulta principal. Usar uma subconsulta equivale a executar duas consultas seqenciais e usar o resultado da primeira como o valor de pesquisa na segunda consulta.

Introduo ao Oracle: SQL e PL/SQL 6-3

Subconsultas
SELECT FROM WHERE

select_list tabela operador expr (SELECT FROM

select_list tabela);

A subconsulta (consulta interna) executada uma vez antes da consulta principal. O resultado da subconsulta usado pela consulta principal (consulta externa).

6-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas Uma subconsulta uma instruo SELECT que incorporada em uma clusula de outra instruo SELECT. Voc pode desenvolver instrues sofisticadas a partir de instrues simples usando subconsultas. Elas podem ser muito teis quando voc precisar selecionar linhas de uma tabela com uma condio que dependa dos dados na prpria tabela. possvel colocar a subconsulta em vrias clusulas SQL: clusula WHERE clusula HAVING clusula FROM inclui um operador de comparao tal como >, = ou IN

Na sintaxe: operador

Observao: Os operadores de comparao subdividem-se em duas classes: operadores de uma nica linha (>, =, >=, <, <>, <=) e operadores de vrias linhas (IN, ANY, ALL). A subconsulta geralmente chamada de instruo SELECT, sub-SELECT ou SELECT interna aninhada. A subconsulta normalmente executada primeiro e sua sada usada para concluir a condio de consulta da consulta principal ou externa.

Introduo ao Oracle: SQL e PL/SQL 6-4

Usando uma Subconsulta


SQL> SELECT ename 2 FROM emp 2975 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

ENAME ---------KING FORD SCOTT

6-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta No slide, a consulta interna determina o salrio do funcionrio 7566. A consulta externa obtm o resultado da consulta interna e o utiliza para exibir todos os funcionrios que recebem mais que essa quantia.

Introduo ao Oracle: SQL e PL/SQL 6-5

Diretrizes para o Uso de Subconsultas


Coloque as subconsultas entre parnteses. Coloque as subconsultas no lado direito do operador de comparao. No adicione uma clusula ORDER BY a uma subconsulta. Use operadores de uma nica linha com subconsultas de uma nica linha. Use operadores de vrias linhas com subconsultas de vrias linhas.
6-6 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes para o Uso de Subconsultas Uma subconsulta deve estar entre parnteses. Uma subconsulta deve aparecer do lado direito do operador de comparao. As subconsultas no podem conter uma clusula ORDER BY. S possvel haver uma clusula ORDER BY para uma instruo SELECT e, se estiver especificado, ela deve ser a ltima clusula na instruo SELECT principal. So usadas duas classes de operadores de comparao nas subconsultas: operadores de uma nica linha e operadores de vrias linhas.

Introduo ao Oracle: SQL e PL/SQL 6-6

Tipos de Subconsultas
Subconsulta de uma nica linha
Consulta principal retorna Subconsulta

CLERK

Subconsulta de vrias linhas


Consulta principal retorna Subconsulta

CLERK MANAGER

Subconsulta de vrias colunas


Consulta principal Main query Subconsulta Subquery
6-7

retorna

CLERK 7900 MANAGER 7698

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de Subconsultas Subconsultas de uma nica linha: consultas que retornam somente uma linha da instruo SELECT interna Subconsultas de vrias linhas: consultas que retornam mais de uma linha da instruo SELECT interna Subconsultas de vrias colunas: consultas que retornam mais de uma coluna da instruo SELECT interna

Introduo ao Oracle: SQL e PL/SQL 6-7

Subconsultas de uma nica Linha


Retorne somente uma linha Use operadores de comparao de uma nica linha
Operador = > >= < <= <>
6-8

Significado Igual a Maior do que Maior do que ou igual a Menor do que Menor ou igual a Diferente de

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de uma nica Linha A subconsulta de uma nica linha retorna uma linha da instruo SELECT interna. Esse tipo de subconsulta usa um operador de uma nica linha. O slide fornece uma lista de operadores de uma nica linha. Exemplo Exiba os funcionrios cujo cargo seja o mesmo do funcionrio 7369.
SQL> SELECT 2 FROM 3 WHERE 4 5 6 ename, job emp job = (SELECT FROM WHERE job emp empno = 7369);

ENAME ---------JAMES SMITH ADAMS MILLER

JOB --------CLERK CLERK CLERK CLERK

Introduo ao Oracle: SQL e PL/SQL 6-8

Executando Subconsultas de uma nica Linha


SQL> 2 3 4 5 6 7 8 9 10 SELECT FROM WHERE ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM WHERE
CLERK

job emp empno = 7369)


1100

AND

sal emp empno = 7876);

ENAME JOB ---------- --------MILLER CLERK

6-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Executando Subconsultas de uma nica Linha A instruo SELECT pode ser considerada um bloco de consulta. O exemplo no slide exibe funcionrios cujo cargo o mesmo que o do funcionrio 7369 e cujo salrio maior que o do funcionrio 7876. O exemplo consiste em trs blocos de consulta: a consulta externa e duas consultas internas. Os blocos de consulta interna so executados primeiro, produzindo os resultados da consulta: CLERK e 1100, respectivamente. O bloco de consulta externa ento processado e usa os valores retornados pelas consultas internas para completar suas condies de pesquisa. Ambas as consultas internas retornam valores nicos (CLERK e 1100, respectivamente). Portanto, essa instruo SQL chamada de subconsulta de uma nica linha. Observao: As consultas externa e interna podem obter dados de tabelas diferentes.

Introduo ao Oracle: SQL e PL/SQL 6-9

Usando Funes de Grupo em uma Subconsulta


SQL> SELECT 2 FROM 3 WHERE 4 5 ename, job, sal emp sal = (SELECT FROM
800

MIN(sal) emp);

ENAME JOB SAL ---------- --------- --------SMITH CLERK 800

6-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Funes de Grupo em uma Subconsulta possvel exibir dados de uma consulta principal usando uma funo de grupo em uma subconsulta para retornar uma nica linha. A subconsulta fica entre parnteses e colocada aps o operador de comparao. O exemplo no slide exibe o nome do funcionrio, o cargo do funcionrio e o salrio de todos os funcionrios cujo salrio seja igual ao salrio mnimo. A funo de grupo MIN retorna um nico valor (800) para a consulta externa.

Introduo ao Oracle: SQL e PL/SQL 6-10

Clusula HAVING com Subconsultas


O Oracle Server primeiro executa as subconsultas. O Oracle Server retorna os resultados para a clusula HAVING da consulta principal.
SQL> 2 3 4 5 6 7 SELECT FROM GROUP BY HAVING deptno, MIN(sal) emp deptno MIN(sal) > (SELECT FROM WHERE

800

MIN(sal) emp deptno = 20);

6-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Clusula HAVING com Subconsultas Voc pode usar as subconsultas no s na clusula WHERE, mas tambm na clusula HAVING. O Oracle Server executa a subconsulta e os resultados so retornados para a clusula HAVING da consulta principal. A instruo SQL no slide exibe todos os departamentos que tenham um salrio mnimo maior que o do departamento 20.
DEPTNO MIN(SAL) --------- --------10 1300 30 950

Exemplo Localize o cargo com o menor salrio mdio.


SQL> 2 3 4 5 6 SELECT FROM GROUP BY HAVING job, AVG(sal) emp job AVG(sal) = (SELECT FROM GROUP BY

MIN(AVG(sal)) EMP job);

Introduo ao Oracle: SQL e PL/SQL 6-11

O que H de Errado com esta Instruo?


SQL> SELECT empno, ename 2 FROM emp om ha c 3 WHERE sal = a lin 4 (SELECT MIN(sal) nic inhas uma rias l FROM 5 emp de v dor GROUP BY deptno); a de r6 ERROR: ORA-01427: A subconsulta de uma nica linha retorna mais de uma linha (Single-row subquery returns more than one row) no rows selected

Ope onsulta subc

6-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Erros em Subconsultas Um erro comum em subconsultas o retorno de mais de uma linha para uma subconsulta de uma nica linha. Na instruo SQL do slide, a subconsulta contm uma clusula GROUP BY (deptno), o que indica que a subconsulta retornar vrias linhas, uma para cada grupo que localizar. Nesse caso, o resultado da subconsulta ser 800, 1300 e 950. A consulta externa obtm os resultados da subconsulta (800, 950, 1300) e os utiliza na sua clusula WHERE. A clusula WHERE contm um operador igual (=), um operador de comparao de uma nica linha que espera somente um valor. O operador = no pode aceitar mais de um valor da subconsulta e, portanto, gera o erro. Para corrigir esse erro, altere o operador = para IN.

Introduo ao Oracle: SQL e PL/SQL 6-12

Esta Instruo Ir Funcionar?

SQL> SELECT ename, 2 FROM emp 3 WHERE job = 4 5 6 no rows selected

job

(SELECT job FROM emp WHERE ename='SMYTHE');

lta nsu co sub A

hu nen rna eto o r

valo m

6-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Problemas nas Subconsultas Um problema comum nas subconsultas nenhuma linha ser retornada pela consulta interna. Na instruo SQL do slide, a subconsulta contm uma clusula WHERE (ename='SMYTHE'). Supostamente, a inteno localizar o funcionrio cujo nome seja Smythe. A instruo parece ser correta, mas no seleciona linhas ao ser executada. O problema que Smythe no foi escrito corretamente. No h nenhum funcionrio chamado Smythe. Dessa forma, a subconsulta no retorna nenhuma linha. A consulta externa obtm os resultados da subconsulta (nula) e os utiliza na sua clusula WHERE. A consulta externa no localiza nenhum funcionrio com um cargo igual a nulo e, portanto, no retorna nenhuma linha.

Introduo ao Oracle: SQL e PL/SQL 6-13

Subconsultas de Vrias Linhas


Retorne mais de uma linha Use operadores de comparao de vrias linhas
Operador IN ANY Significado Igual a qualquer membro na lista Compare o valor a cada valor retornado pela subconsulta Compare o valor a todo valor retornado pela subconsulta

ALL

6-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Vrias Linhas As subconsultas que retornam mais de uma linha chamam-se subconsultas de vrias linhas. Voc pode usar um operador de vrias linhas, em vez de um operador de uma nica linha, com uma subconsulta de vrias linhas. O operador de vrias linhas espera um ou mais valores.
SQL> SELECT 2 FROM 3 WHERE 4 5 ename, sal, deptno emp sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno);

Exemplo Localize os funcionrios que recebam o mesmo salrio que o salrio mnimo dos departamentos. A consulta interna executada primeiro, produzindo um resultado de consulta que contenha trs linhas: 800, 950, 1300. O bloco da consulta principal processado em seguida e usa os valores retornados pela consulta interna para completar sua condio de pesquisa. Na verdade, a consulta principal pareceria da seguinte forma para o Oracle Server:
SQL> SELECT 2 FROM 3 WHERE ename, sal, deptno emp sal IN (800, 950, 1300);

Introduo ao Oracle: SQL e PL/SQL 6-14

Usando o Operador ANY em Subconsultas de Vrias Linhas


SQL> 2 3 4 5 6 7 SELECT FROM WHERE empno, ename, job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK') job <> 'CLERK'; JOB --------SALESMAN SALESMAN

AND

EMPNO --------7654 7521

ENAME ---------MARTIN WARD

6-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Vrias Linhas (continuao) O operador ANY (e o operador sinnimo SOME) compara um valor a cada valor retornado por uma subconsulta. O exemplo no slide exibe funcionrios cujo salrio menor que o de qualquer escriturrio e que no so escriturrios. O salrio mximo que um escriturrio recebe US$ 1.300. A instruo SQL exibe todos os funcionrios que no so escriturrios, mas recebem menos que US$ 1.300. <ANY significa menos do que o mximo. >ANY significa mais do que o mnimo. =ANY equivale a IN.

Introduo ao Oracle: SQL e PL/SQL 6-15

Usando o Operador ALL em Subconsultas de Vrias Linhas


SQL> SELECT 2 FROM 3 WHERE 4 5 6 EMPNO --------7839 7566 7902 7788 empno, ename, job 1566.6667 2175 emp 2916.6667 sal > ALL (SELECT avg(sal) FROM emp GROUP BY deptno); JOB --------PRESIDENT MANAGER ANALYST ANALYST

ENAME ---------KING JONES FORD SCOTT

6-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Vrias Linhas (continuao) O operador ALL compara um valor a todo valor retornado por uma subconsulta. O exemplo no slide exibe funcionrios cujo salrio seja maior que os salrios mdios de todos os departamentos. O salrio mdio mais alto de um departamento US$ 2.916,66, portanto a consulta retorna os funcionrios cujo salrio seja maior que US$ 2.916,66. >ALL significa mais do que o mximo e <ALL significa menos do que o mnimo. O operador NOT pode ser usado com os operadores IN, ANY e ALL.

Introduo ao Oracle: SQL e PL/SQL 6-16

Sumrio
As subconsultas so teis quando uma consulta baseia-se em valores desconhecidos.
SELECT FROM WHERE

select_list tabela operador expr (SELECT select_list FROM tabela);

6-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio Uma subconsulta uma instruo SELECT que incorporada em uma clusula de outra instruo SQL. As subconsultas so teis quando uma consulta baseia-se em critrios de seleo com valores intermedirios desconhecidos. As subconsultas tm as seguintes caractersticas: Podem passar uma linha de dados para uma instruo principal que contenha um operador de uma nica linha, tal como =, <>, >, >=, < ou <= Podem passar vrias linhas de dados para uma instruo principal que contenha um operador de vrias linhas, tal como IN So processadas primeiro pelo Oracle Server, e a clusula WHERE ou HAVING usa os resultados Podem conter funes de grupo

Introduo ao Oracle: SQL e PL/SQL 6-17

Viso Geral do Exerccio

Criando subconsultas para valores de consulta com base em critrios desconhecidos Usando subconsultas para descobrir quais valores existem em um conjunto de dados e no em outro

6-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc criar consultas complexas usando instrues SELECT aninhadas. Questes Impressas Voc pode considerar criar a consulta interna primeiro para essas questes. Certifique-se de que ela execute e produza os dados que voc antecipar antes de codificar a consulta externa.

Introduo ao Oracle: SQL e PL/SQL 6-18

Exerccio 6 1. Crie uma consulta para exibir o nome e a data de admisso de todos os funcionrios no mesmo departamento que Blake. Exclua Blake.
ENAME HIREDATE ---------- --------ALLEN 20-FEB-81 WARD 22-FEB-81 MARTIN 28-SEP-81 TURNER 08-SEP-81 JAMES 03-DEC-81 5 rows selected.

2. Crie uma consulta para exibir o nmero e o nome de todos os funcionrios que recebam mais que o salrio mdio. Classifique os resultados, por salrio, em ordem decrescente.
EMPNO ENAME ----- ----------7839 KING 7902 FORD 7788 SCOTT 7566 JONES 7698 BLAKE 7782 CLARK 6 rows selected.

3. Crie uma consulta que exiba o nmero e o nome de todos os funcionrios que trabalhem em um departamento com qualquer funcionrio cujo nome contenha um T. Salve sua instruo SQL em um arquivo chamado p6q3.sql.
EMPNO ENAME ------ -------7566 JONES 7788 SCOTT 7876 ADAMS 7369 SMITH 7902 FORD 7698 BLAKE 7654 MARTIN 7499 ALLEN 7844 TURNER 7900 JAMES 7521 WARD 11 rows selected.

Introduo ao Oracle: SQL e PL/SQL 6-19

Exerccio 6 (continuao) 4. Exiba o nome do funcionrio, o nmero do departamento e o cargo de todos os funcionrios cuja localizao do departamento seja Dallas.
ENAME DEPTNO JOB ------ ------ --------JONES 20 MANAGER FORD 20 ANALYST SMITH 20 CLERK SCOTT 20 ANALYST ADAMS 20 CLERK

5. Exiba o nome e o salrio dos funcionrios que se reportem a King.


ENAME -----BLAKE CLARK JONES SAL ---2850 2450 2975

6. Exiba o nmero do departamento, o nome e o cargo de todos os funcionrios do departamento de Vendas.


DEPTNO -----30 30 30 30 30 30 6 rows ENAME JOB -------- --------BLAKE MANAGER MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN JAMES CLERK WARD SALESMAN selected.

Se voc tiver tempo, complete os exerccios abaixo: 7. Modifique p6q3.sql para exibir o nmero, o nome e o salrio de todos os funcionrios que recebam mais que o salrio mdio e trabalhem em um departamento com qualquer funcionrio cujo nome contenha um T. Salve novamente como p6q7.sql. Execute novamente a consulta.
EMPNO ----7566 7788 7902 7698 ENAME -----JONES SCOTT FORD BLAKE SAL ---2975 3000 3000 2850

Introduo ao Oracle: SQL e PL/SQL 6-20

7
Subconsultas de Vrias Colunas

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Criar uma subconsulta de vrias colunas Descrever e explicar o comportamento de subconsultas quando valores nulos forem recuperados Criar uma subconsulta em uma clusula FROM

7-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender a criar subconsultas de vrias colunas e subconsultas na clusula FROM de uma instruo SELECT.

Introduo ao Oracle: SQL e PL/SQL 7-2

Subconsultas de Vrias Colunas


Consulta principal
MANAGER 10

Subconsulta
SALESMAN MANAGER CLERK 30 10 20

A consulta principal compara


MANAGER 10

Valores de uma subconsulta de vrias linhas e de vrias colunas


SALESMAN MANAGER CLERK 30 10 20

7-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsultas de Vrias Colunas At este momento voc tem criado subconsultas de uma nica linha e subconsultas de vrias linhas, onde somente uma coluna comparada na clusula WHERE ou na clusula HAVING da instruo SELECT. Para comparar duas ou mais colunas, voc dever criar uma clusula WHERE composta usando operadores lgicos. As subconsultas de vrias colunas permitem que voc combine condies WHERE duplicadas em uma nica clusula WHERE. Sintaxe SELECT FROM WHERE
coluna, coluna, ... tabela (coluna, coluna, ...) IN (SELECT coluna, coluna, ... FROM tabela WHERE condio);

Introduo ao Oracle: SQL e PL/SQL 7-3

Usando Subconsultas de Vrias Colunas


Exiba a ID da ordem, a ID do produto e a quantidade de itens na tabela de itens que corresponde ID do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7 SELECT FROM WHERE ordid, prodid, qty item (prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 605) ordid <> 605;

AND

7-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Subconsultas de Vrias Colunas O exemplo no slide o de uma subconsulta de vrias colunas porque a subconsulta retorna mais de uma coluna. Ele compara os valores na coluna PRODID e na coluna QTY de cada linha do candidato na tabela ITEM aos valores na coluna PRODID e na coluna QTY dos itens na ordem 605. Primeiro, execute a subconsulta para ver os valores PRODID e QTY de cada item na ordem 605.
SQL> SELECT prodid, qty 2 FROM item 3 WHERE ordid = 605; PRODID QTY ---------- --------100861 100 100870 500 100890 5 101860 50 101863 100 102130 10 6 rows selected.

Introduo ao Oracle: SQL e PL/SQL 7-4

Usando Subconsultas de Vrias Colunas


Exiba o nmero da ordem, o nmero do produto e a quantidade de qualquer item em que o nmero do produto e a quantidade correspondam ao nmero do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7
7-5

SELECT FROM WHERE

AND

ordid, prodid, qty item (prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 605) ordid <> 605;

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando Subconsultas de Vrias Colunas (continuao) Quando a instruo SQL no slide executada, o servidor Oracle compara os valores nas colunas PRODID e QTY e retorna as ordens em que o nmero e a quantidade do produto correspondem ao nmero do produto e quantidade desse item na ordem 605. A sada da instruo SQL :
ORDID 617 617 616 PRODID 100861 100870 102130 QTY 100 500 10

--------- --------- ---------

A sada mostra que h trs itens em outras ordens que contm o mesmo nmero do produto e a mesma quantidade que um item na ordem 605. Por exemplo, a ordem 617 solicitou uma quantidade 500 do produto 100870. A ordem 605 tambm solicitou uma quantidade 500 do produto 100870. Portanto, essas linhas do candidato so parte da sada.

Introduo ao Oracle: SQL e PL/SQL 7-5

Comparaes de Coluna

Aos pares
PRODID 101863 100861 102130 100890 100870 101860 QTY 100 100 10 5 500 50

Sem ser aos pares


PRODID 101863 100861 102130 100890 100870 101860 QTY 100 100 10 5 500 50

7-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Comparaes aos Pares Versus Comparaes que No Sejam aos Pares As comparaes de coluna em consultas de vrias colunas podem ser comparaes aos pares ou no. O slide mostra os nmeros do produto e as quantidades dos itens na ordem 605. No exemplo do slide anterior, uma comparao aos pares foi executada na clusula WHERE. Cada linha do candidato na instruo SELECT deve ter o mesmo nmero do produto e a mesma quantidade que um item na ordem 605. Isso ilustrado no lado esquerdo do slide acima. As setas indicam que o nmero do produto e a quantidade em uma linha do candidato correspondem a um nmero do produto e a uma quantidade de um item na ordem 605. Uma subconsulta de vrias colunas tambm pode ser uma comparao que no seja aos pares. Se voc desejar uma comparao que no seja aos pares (um produto cruzado), voc dever usar uma clusula WHERE com vrias condies. Uma linha do candidato deve corresponder s vrias condies na clusula WHERE, mas os valores so comparados individualmente. Uma linha do candidato deve corresponder a algum nmero do produto na ordem 605, assim como a alguma quantidade na ordem 605, mas esses valores no precisam estar na mesma linha. Isso ilustrado no lado direito do slide. Por exemplo, o produto 102130 aparece em outras ordens, uma ordem correspondendo quantidade na ordem 605 (10) e outra ordem tendo uma quantidade de 500. As setas exibem uma amostra das vrias quantidades solicitadas para determinado produto.

Introduo ao Oracle: SQL e PL/SQL 7-6

Subconsulta de Comparao que No Seja aos Pares


Exiba o nmero da ordem, o nmero do produto e a quantidade de qualquer item em que o nmero do produto e a quantidade correspondam a qualquer nmero do produto e quantidade de um item na ordem 605.
SQL> 2 3 4 5 6 7 8 9
7-7

SELECT FROM WHERE

AND

AND

ordid, prodid, qty item prodid IN (SELECT FROM WHERE qty IN (SELECT FROM WHERE ordid <> 605;

prodid item ordid = 605) qty item ordid = 605)

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsulta de Comparao que No Seja aos Pares O exemplo no slide faz uma comparao das colunas sem ser aos pares. Ele exibe o nmero da ordem, o nmero do produto e a quantidade de qualquer item em que o nmero do produto e a quantidade correspondam a qualquer nmero do produto e quantidade de um item na ordem 605. A ordem 605 no includa na sada.

Introduo ao Oracle: SQL e PL/SQL 7-7

Subconsulta que No Seja aos Pares


ORDID PRODID QTY --------- --------- --------609 100870 5 616 100861 10 616 102130 10 621 100861 10 618 100870 10 618 100861 50 616 100870 50 617 100861 100 619 102130 100 615 100870 100 617 101860 100 621 100870 100 617 102130 100 . . . 16 rows selected.
7-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Subconsulta que No Seja aos Pares Os resultados da subconsulta sem ser aos pares so mostrados no slide. Dezesseis linhas do candidato na tabela ITEM correspondem s vrias condies na clusula WHERE. Por exemplo, um item da ordem 621 retornado da instruo SQL. Um produto na ordem 621 (nmero do produto 100861) corresponde a um produto de um item na ordem 605. A quantidade do produto 100861 na ordem 621 (10) corresponde quantidade em outro item na ordem 605 (a quantidade do produto 102130).

Introduo ao Oracle: SQL e PL/SQL 7-8

Valores Nulos em uma Subconsulta


SQL> SELECT employee.ename 2 FROM emp employee 3 WHERE employee.empno NOT IN 4 (SELECT manager.mgr 5 FROM emp manager); no rows selected.

7-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Retornando Nulos no Conjunto Resultante de uma Subconsulta A instruo SQL no slide tenta exibir todos os funcionrios que no tenham nenhum subordinado. Logicamente, essa instruo SQL deveria ter retornado oito linhas. Entretanto, a instruo SQL no retorna nenhuma linha. Um dos valores retornados pela consulta interna um valor nulo e, portanto, a consulta inteira no retorna nenhuma linha. O motivo que todas as condies que comparam um valor nulo resultam em um nulo. Dessa forma, sempre que houver a possibilidade de valores nulos serem parte do conjunto resultante de uma subconsulta, o operador NOT IN no ser usado. O operador NOT IN equivalente a !=ALL. Observe que o valor nulo como parte do conjunto resultante de uma subconsulta no ser um problema se voc estiver usando o operador IN. O operador IN equivalente a =ANY. Por exemplo, para exibir os funcionrios que tm subordinados, use a seguinte instruo SQL:
SQL> SELECT 2 FROM 3 WHERE 4 employee.ename emp employee employee.empno IN (SELECT manager.mgr FROM emp manager);

ENAME ---------KING ... 6 rows selected.


Introduo ao Oracle: SQL e PL/SQL 7-9

Usando uma Subconsulta na Clusula FROM


SQL> 2 3 4 5 6 SELECT FROM a.ename, a.sal, a.deptno, b.salavg emp a, (SELECT deptno, avg(sal) salavg FROM emp GROUP BY deptno) b a.deptno = b.deptno a.sal > b.salavg;

WHERE AND

ENAME SAL DEPTNO SALAVG ---------- --------- --------- ---------KING 5000 10 2916.6667 JONES 2975 20 2175 SCOTT 3000 20 2175 ... 6 rows selected.
7-10 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Subconsulta na Clusula FROM Voc pode usar uma subconsulta na clusula FROM de uma instruo SELECT, o que se parece muito com a forma de utilizar as views. Uma subconsulta na clusula FROM de uma instruo SELECT define uma origem de dados para essa, e somente essa, instruo SELECT em particular. O exemplo no slide exibe nomes de funcionrios, salrios, nmeros de departamento e salrios mdios de todos os funcionrios que recebem mais que o salrio mdio nos seus departamentos.

Introduo ao Oracle: SQL e PL/SQL 7-10

Sumrio
Uma subconsulta de vrias colunas retorna mais de uma coluna. As comparaes de coluna em comparaes de vrias colunas podem ser aos pares ou no. Uma subconsulta de vrias colunas tambm pode ser usada na clusula FROM de uma instruo SELECT.

7-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio As subconsultas de vrias colunas permitem que voc combine condies WHERE duplicadas em uma nica clusula WHERE. As comparaes de coluna em consultas de vrias colunas podem ser comparaes aos pares ou no. Voc pode usar uma subconsulta para definir uma tabela que seja operada por uma consulta contida. Para isso, coloque a subconsulta na clusula FROM da consulta contida, como se fosse um nome de tabela.

Introduo ao Oracle: SQL e PL/SQL 7-11

Viso Geral do Exerccio

Criando subconsultas de vrias colunas

7-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc criar subconsultas de vrios valores.

Introduo ao Oracle: SQL e PL/SQL 7-12

Exerccio 7 1. Crie uma consulta para exibir o nome, o nmero do departamento e o salrio de qualquer funcionrio cujo nmero do departamento e salrio correspondam ao nmero do departamento e salrio de qualquer funcionrio que receba comisso.
ENAME DEPTNO SAL -------- ------ -----MARTIN 30 1250 WARD 30 1250 TURNER 30 1500 ALLEN 30 1600

2. Exiba o nome, o nome do departamento e o salrio de qualquer funcionrio cujo salrio e cuja comisso correspondam ao salrio e comisso de qualquer funcionrio localizado em Dallas.
ENAME ------SMITH ADAMS JONES FORD SCOTT DNAME SAL --------- -----RESEARCH 800 RESEARCH 1100 RESEARCH 2975 RESEARCH 3000 RESEARCH 3000

3. Crie uma consulta para exibir o nome, a data de admisso e o salrio de todos os funcionrios que tenham o mesmo salrio e a mesma comisso que Scott. Observao: No exiba SCOTT no conjunto de resultados.
ENAME HIREDATE SAL ------- --------- -----FORD 03-DEC-81 3000

4. Crie uma consulta para exibir os funcionrios que recebem um salrio maior que o de todos os escriturrios. Classifique os resultados sobre salrios do maior para o menor.
ENAME JOB SAL ---------- --------- --------KING PRESIDENT 5000 FORD ANALYST 3000 SCOTT ANALYST 3000 JONES MANAGER 2975 BLAKE MANAGER 2850 CLARK MANAGER 2450 ALLEN SALESMAN 1600 TURNER SALESMAN 1500 8 rows selected.

Introduo ao Oracle: SQL e PL/SQL 7-13

Introduo ao Oracle: SQL e PL/SQL 7-14

8
Produzindo uma Sada Legvel com o SQL*Plus

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Produzir consultas que requeiram uma varivel de entrada Personalizar o ambiente SQL*Plus Produzir sadas mais legveis Criar e executar arquivos de script Salvar personalizaes
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

8-2

Objetivo da Lio Nesta lio, voc aprender a incluir comandos do SQL*Plus para produzir sadas SQL mais legveis. Voc pode criar um arquivo de comando contendo uma clusula WHERE para restringir as linhas exibidas. Para alterar a condio sempre que o arquivo de comando for executado, use variveis de substituio. As variveis de substituio podem substituir valores na clusula WHERE, uma string de texto e at uma coluna ou um nome de tabela.

Introduo ao Oracle: SQL e PL/SQL 8-2

Relatrios Interativos
Desejo entrar com valores de consulta em tempo de execuo.

...sal = ? deptno = ? .. ename = ? ...

Usurio
8-3 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Relatrios Interativos Os exemplos at aqui no tm sido interativos. Em uma aplicao concluda, o usurio acionaria o relatrio, que, por sua vez, seria executado sem nenhum pedido posterior. A faixa de dados seria predeterminada pela clusula WHERE fixada no arquivo de script do SQL*Plus. Ao usar o SQL*Plus, voc pode criar relatrios que solicitem ao usurio o fornecimento de seus prprios valores para restringir a faixa de dados retornada. Para criar relatrios interativos, voc pode incorporar variveis de substituio em um arquivo de comando ou em uma nica instruo SQL. Uma varivel pode ser comparada a um container em que os valores so armazenados temporariamente.

Introduo ao Oracle: SQL e PL/SQL 8-3

Variveis de Substituio
Use as variveis de substituio do SQL*Plus para armazenar valores temporariamente.
"E" comercial nico (&) "E" comercial duplo (&&) Comandos DEFINE e ACCEPT

Passe os valores da varivel entre instrues SQL. Altere dinamicamente cabealhos e rodaps.

8-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Variveis de Substituio No SQL*Plus, voc pode usar variveis de substituio de "e" comercial nico (&) para armazenar valores temporariamente. possvel predefinir variveis no SQL*Plus usando os comandos ACCEPT ou DEFINE. ACCEPT l uma linha de entrada do usurio e a armazena em uma varivel. DEFINE cria e atribui um valor a uma varivel. Exemplos de Faixas de Dados Restritas Relatar cifras somente para o trimestre atual ou para faixas de datas especificadas Relatar somente os dados relevantes para o usurio solicitando o relatrio Exibir somente o pessoal de determinado departamento

Outros Efeitos Interativos Os efeitos interativos no esto restritos interao direta do usurio com a clusula WHERE. Os mesmos princpios podem ser usados para alcanar outros objetivos. Por exemplo: Alterar dinamicamente cabealhos e rodaps Obter valores de entrada a partir de um arquivo em vez de a partir de uma pessoa Passar valores de uma instruo SQL para outra

O SQL*Plus no suporta checagens de validao (exceto para tipos de dados) na entrada do usurio. Certifique-se de criar prompts simples e sem ambigidade para o usurio.

Introduo ao Oracle: SQL e PL/SQL 8-4

Usando a Varivel de Substituio &


Use a varivel precedida de um "e" comercial (&) para solicitar um valor ao usurio.
SQL> SELECT 2 FROM 3 WHERE empno, ename, sal, deptno emp empno = &employee_num;

Enter value for employee_num: 7369 EMPNO ENAME SAL DEPTNO --------- ---------- --------- --------7369 SMITH 800 20

8-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Varivel de Substituio de "E" Comercial nico Ao executarem um relatrio, os usurios geralmente desejam restringir os dados retornados dinamicamente. O SQL*Plus fornece essa flexibilidade atravs das variveis de usurio. Use um "e" comercial (&) para identificar cada varivel na sua instruo SQL. No necessrio definir o valor de cada varivel.
Notao &user_variable Descrio Indica uma varivel em uma instruo SQL. Se a varivel no existir, o SQL*Plus pedir que o usurio fornea um valor (o SQL*Plus descarta uma nova varivel aps ser usada).

O exemplo no slide cria uma instruo SQL para pedir que o usurio fornea um nmero de funcionrio em tempo de execuo e exibe o nmero do funcionrio, o nome, o salrio e o nmero do departamento desse funcionrio. Com o "e" comercial nico, o usurio ser solicitado sempre que o comando for executado, se a varivel no existir.

Introduo ao Oracle: SQL e PL/SQL 8-5

Usando o Comando SET VERIFY


Alterne a exibio do texto de um comando antes e depois do SQL*Plus trocar variveis de substituio por valores.
SQL> SQL> 2 3 SET VERIFY ON SELECT empno, ename, sal, deptno FROM emp WHERE empno = &employee_num;

Enter value for employee_num: 7369 old 3: WHERE empno = &employee_num new 3: WHERE empno = 7369 ...

8-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Comando SET VERIFY Para confirmar as alteraes na instruo SQL, use o comando SET VERIFY do SQL*Plus. Definir SET VERIFY ON faz com que o SQL*Plus exiba o texto de um comando antes e depois de trocar variveis de substituio por valores. O exemplo no slide exibe o valor antigo e o valor novo da coluna EMPNO.

Introduo ao Oracle: SQL e PL/SQL 8-6

Valores de Caractere e Data com Variveis de Substituio


Use aspas simples para valores de caractere e data.
SQL> SELECT ename, deptno, sal*12 2 FROM emp 3 WHERE job='&job_title';

Enter value for job_title: ANALYST ENAME DEPTNO SAL*12 ---------- --------- --------SCOTT 20 36000 FORD 20 36000

8-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Especificando Valores de Caractere e Data com Variveis de Substituio Em uma clusula WHERE, os valores de caractere e data devem estar entre aspas simples. A mesma regra se aplica s variveis de substituio. Para evitar entrar com as aspas em tempo de execuo, coloque a varivel entre aspas simples dentro da prpria instruo SQL. O slide mostra uma consulta para recuperar o nome do funcionrio, o nmero do departamento e o salrio anual de todos os funcionrios baseado no cargo informado no prompt pelo usurio. Observao: Voc tambm pode usar funes tais como UPPER e LOWER com o "e" comercial. Use UPPER('&job_title') para que o usurio no precise informar o cargo em maisculas.

Introduo ao Oracle: SQL e PL/SQL 8-7

Especificando Nomes de Coluna, Expresses e Texto em Tempo de Execuo


Use variveis de substituio para complementar o seguinte: Condio WHERE Clusula ORDER BY Expresso da coluna Nome da tabela Toda a instruo SELECT
8-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Especificando Nomes de Coluna, Expresses e Texto em Tempo de Execuo As variveis de substituio podem ser usadas na clusula WHERE de uma instruo SQL, assim como tambm podem ser usadas para substituir nomes de colunas, expresses ou texto. Exemplo Exiba o nmero do funcionrio e qualquer outra coluna e qualquer condio dos funcionrios.
SQL> SELECT 2 FROM 3 WHERE empno, &column_name emp &condition;

Informe um valor para column_name: job Informe um valor para condition: deptno = 10 EMPNO --------7839 7782 7934 JOB --------PRESIDENT MANAGER CLERK

Se nenhum valor for informado para a varivel de substituio, ocorrer um erro quando voc executar a instruo anterior.
Introduo ao Oracle: SQL e PL/SQL 8-8

Especificando Nomes de Coluna, Expresses e Texto em Tempo de Execuo


SQL> 2 3 4 SELECT FROM WHERE ORDER BY empno, ename, job, &column_name emp &condition &order_column;

Enter value for column_name: sal Enter value for condition: sal>=3000 Enter value for order_column: ename EMPNO --------7902 7839 7788
8-9

ENAME ---------FORD KING SCOTT

JOB SAL --------- --------ANALYST 3000 PRESIDENT 5000 ANALYST 3000

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Especificando Nomes de Coluna, Expresses e Texto em Tempo de Execuo (continuao) O exemplo no slide exibe o nmero do funcionrio, o nome, o cargo e qualquer outra coluna especificada pelo usurio em tempo de execuo, na tabela EMP. O usurio tambm pode especificar a condio para a recuperao de linhas e o nome da coluna pela qual os dados resultantes devem ser solicitados.

Introduo ao Oracle: SQL e PL/SQL 8-9

Usando a Varivel de Substituio &&


Use o "e" comercial duplo (&&) se desejar reutilizar o valor da varivel sem precisar solicitar sempre o usurio.
SQL> SELECT 2 FROM 3 ORDER BY empno, ename, job, &&column_name emp &column_name;

Enter value for column_name: deptno EMPNO ENAME JOB DEPTNO --------- ---------- --------- --------7839 KING PRESIDENT 10 7782 CLARK MANAGER 10 7934 MILLER CLERK 10 ... 14 rows selected.
8-10 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Varivel de Substituio de "e" Comercial Duplo Voc pode usar varivel de substituio de "e" comercial duplo (&&) para reutilizar o valor da varivel sem precisar solicitar sempre o usurio. O usurio s ver o prompt para o valor uma vez. No exemplo do slide, o usurio solicitado a dar o valor para a varivel column_name somente uma vez. O valor fornecido pelo usurio (deptno) usado para a exibio e a solicitao de dados. O SQL*Plus armazena o valor fornecido usando o comando DEFINE. Ele o utilizar novamente sempre que voc fizer referncia ao nome da varivel. Aps inserir uma varivel de usurio, voc precisar usar o comando UNDEFINE para delet-la.

Introduo ao Oracle: SQL e PL/SQL 8-10

Definindo as Variveis de Usurio


Voc pode predefinir variveis usando um destes dois comandos do SQL*Plus:
DEFINE: Crie uma varivel de usurio

de tipo de dados CHAR


ACCEPT: Leia a entrada do usurio e

armazene-a em uma varivel Se voc precisar predefinir uma varivel que inclua espaos, dever colocar o valor entre aspas simples quando utilizar o comando DEFINE.
8-11 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Definindo Variveis de Usurio possvel predefinir variveis de usurio antes de executar uma instruo SELECT. O SQL*Plus fornece dois comandos para definir e configurar variveis de usurio: DEFINE e ACCEPT.
Comando DEFINE varivel = valor DEFINE varivel DEFINE ACCEPT (veja a sintaxe no prximo slide) Descrio Cria uma varivel de usurio de tipo de dados CHAR e atribui um valor a ela Exibe a varivel, seu valor e seu tipo de dados Exibe todas as variveis de usurio com o valor e o tipo de dados L uma linha da entrada do usurio e a armazena em uma varivel

Introduo ao Oracle: SQL e PL/SQL 8-11

O Comando ACCEPT
Cria um prompt personalizado durante a aceitao da entrada do usurio Define explicitamente uma varivel de tipo de dados NUMBER ou DATE Oculta a entrada do usurio por motivos de segurana
ACCEPT varivel [tipo de dados] [FORMAT formato] [PROMPT texto] [HIDE]

8-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Comando ACCEPT Na sintaxe: varivel tipo de dados o nome da varivel que armazena o valor (Se no existir, ser criada pelo SQL*Plus.) NUMBER, CHAR ou DATE (CHAR tem um limite de comprimento mximo de 240 bytes. DATE comparado a um modelo de formato, e o tipo de dados CHAR.) especifica o modelo de formato por exemplo, A10 ou 9.999 exibe o texto antes de o usurio informar o valor suprime o que o usurio informar por exemplo, uma senha

FOR[MAT] formato PROMPT texto HIDE

Observao: No preceda o parmetro de substituio do SQL*Plus com o "e" comercial (&) quando fizer referncia ao parmetro de substituio no comando ACCEPT.

Introduo ao Oracle: SQL e PL/SQL 8-12

Usando o Comando ACCEPT


ACCEPT SELECT FROM WHERE / dept PROMPT 'Provide the department name:' * dept dname = UPPER('&dept')

Provide the department name: Sales DEPTNO DNAME LOC --------- -------------- ------------30 SALES CHICAGO

8-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Comando ACCEPT O comando ACCEPT l varivel DEPT. O prompt que ele exibe ao pedir que o usurio fornea a varivel "Fornea o nome do departamento". Em seguida, a instruo SELECT obtm o valor do departamento informado pelo usurio e o utiliza para recuperar a linha apropriada da tabela DEPT. Se o usurio entrar com um valor vlido para o nome do departamento, a instruo SELECT ser executada da mesma forma que qualquer outra instruo SELECT, obtendo o valor entrado pelo usurio e usando-o na clusula WHERE para comparar com DNAME. Note que o caractere & no aparece com a varivel DEPT no comando ACCEPT. O & aparece somente na instruo SELECT. Diretrizes Se no existir uma varivel, os comandos ACCEPT e DEFINE a criaro; se ela existir, esses comandos a redefiniro automaticamente. Ao usar o comando DEFINE, utilize aspas simples ('') para envolver uma string que contenha um espao incorporado. Use o comando ACCEPT para: Fornecer um prompt personalizado ao aceitar a entrada do usurio; caso contrrio, voc ver a mensagem default "Informe um valor para a varivel" Definir explicitamente uma varivel de tipo de dados NUMBER ou DATE Ocultar a entrada do usurio por motivos de segurana

Introduo ao Oracle: SQL e PL/SQL 8-13

Comandos DEFINE e UNDEFINE


A varivel permanece definida at voc:
Usar o comando UNDEFINE para limp-la;

ou
Sair do SQL*Plus

possvel verificar suas alteraes com o comando DEFINE. Para definir variveis para cada sesso, modifique o arquivo login.sql de forma que as variveis sejam criadas na inicializao.
8-14 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Os Comandos DEFINE e UNDEFINE As variveis so definidas at voc: Emitir o comando UNDEFINE em uma varivel; ou Sair do SQL*Plus

Quando voc no define variveis, possvel verificar suas alteraes com o comando DEFINE. Quando voc sai do SQL*Plus, as variveis definidas durante essa sesso so perdidas. Para definir essas variveis para cada sesso, modifique o arquivo login.sql de forma que essas variveis sejam criadas na inicializao.

Introduo ao Oracle: SQL e PL/SQL 8-14

Usando o Comando DEFINE


Crie uma varivel para armazenar o nome do departamento.
SQL> DEFINE deptname = sales SQL> DEFINE deptname DEFINE DEPTNAME = "sales" (CHAR)

Use a varivel da mesma forma que usaria qualquer outra varivel.


SQL> SELECT * 2 FROM dept 3 WHERE dname = UPPER('&deptname');

8-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando o Comando DEFINE Voc pode usar o comando DEFINE para criar uma varivel e, em seguida, usar a varivel da mesma forma que usaria qualquer outra varivel. O exemplo no slide cria uma varivel DEPTNAME que contm o nome do departamento, SALES. A instruo SQL usa essa varivel para exibir o nmero e o local do departamento de vendas.
DEPTNO DNAME --------- ----------30 SALES LOC ------------CHICAGO

Para apagar essa varivel, use o comando UNDEFINE:


SQL> UNDEFINE deptname SQL> DEFINE deptname symbol deptname is UNDEFINED

Introduo ao Oracle: SQL e PL/SQL 8-15

Personalizando o Ambiente SQL*Plus


Use os comandos SET para controlar a sesso atual.
SET system_variable value

Verifique o que voc definiu usando o comando SHOW.


SQL> SET ECHO ON SQL> SHOW ECHO echo ON

8-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Personalizando o Ambiente SQL*Plus Voc pode controlar o ambiente em que o SQL*Plus esteja atualmente operando usando os comandos SET. Na sintaxe: system_variable value uma varivel que controla um aspecto do ambiente da sesso um valor para a varivel do sistema

Voc pode verificar o que definiu usando o comando SHOW. O comando SHOW no slide checa se ECHO estava ativado ou desativado. Para ver todos os valores da varivel SET, use o comando SHOW ALL. Para obter mais informaes, consulte o SQL*Plus Users Guide and Reference, Release 8, "Command Reference".

Introduo ao Oracle: SQL e PL/SQL 8-16

Variveis do Comando SET


ARRAYSIZE {20 | n} COLSEP {_ | text} FEEDBACK {6 | n |OFF | ON} HEADING {OFF | ON} LINESIZE {80 | n} LONG {80 | n} PAGESIZE {24 | n} PAUSE {OFF | ON | text} TERMOUT {OFF | ON}
8-17 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Variveis do Comando SET


Valores e Varivel de SET ARRAY[SIZE] {20| n} COLSEP {_|text} FEED[BACK] {6|n|OFF|ON} HEA[DING] {OFF|ON} LIN[ESIZE] {80|n} LONG {80|n} PAGES[IZE] {24|n} PAU[SE] {OFF|ON|text} TERM[OUT] {OFF|ON} Descrio Define o tamanho da extrao de dados do banco dados Define o texto a ser impresso entre colunas (O default um espao.) Exibe o nmero de registros retornados por uma consulta quando a consulta seleciona no mnimo n registros Determina se os cabealhos da coluna so exibidos nos relatrios Define o nmero de caracteres por linha como n para relatrios Define a largura mxima para a exibio de valores LONG Especifica o nmero de linhas por pgina de sada Permite controlar a rolagem do seu terminal (Voc deve pressionar [Return] aps ver cada pausa.) Determina se a sada exibida na tela

Observao: O valor n representa um valor numrico. Os valores sublinhados indicam valores default. Se voc no entrar um valor com a varivel, o SQL*Plus ir pressupor o valor default.

Introduo ao Oracle: SQL e PL/SQL 8-17

Salvando as Personalizaes no Arquivo login.sql


O arquivo login.sql contm o comando SET standard e outros comandos do SQL*Plus que so implementados no login. Voc pode modificar o login.sql para conter comandos SET adicionais.

8-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Configuraes Default Usando o Arquivo login.sql O arquivo login.sql contm o comando SET standard e outros comandos do SQL*Plus que podem ser necessrios para toda sesso. O arquivo lido e os comandos so implementados no login. Quando voc efetua o logoff da sua sesso, todas as configuraes personalizadas so perdidas. Alterando as Configuraes Default As configuraes implementadas pelo login.sql podem ser alteradas durante a sesso atual. As alteraes feitas s so atuais para essa sesso. Assim que voc efetua o logoff, essas configuraes so perdidas. Adicione ao arquivo login.sql as alteraes permanentes nas configuraes.

Introduo ao Oracle: SQL e PL/SQL 8-18

Comandos de Formato do SQL*Plus

COLUMN [opo da coluna] TTITLE [texto | OFF | ON] BTITLE [texto | OFF | ON] BREAK [ON report_element]

8-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Obtendo Relatrios Mais Legveis Voc pode controlar os recursos de relatrio usando os seguintes comandos:
Comando COL[UMN] [opo da coluna] TTI[TLE] [texto|OFF|ON] BTI[TLE] [texto|OFF|ON] BRE[AK] [ON report_element] Descrio Controla formatos de coluna Especifica um cabealho para aparecer na parte superior de cada pgina Especifica um rodap para aparecer na parte inferior de cada pgina do relatrio Suprime valores duplicados e seciona linhas de dados com alimentao de linha

Diretrizes Todos os comandos de formato permanecem efetivos at o final da sesso do SQL*Plus ou at que a configurao de formato seja sobregravada ou limpa. Lembre-se de redefinir suas configuraes do SQL*Plus para os valores default aps cada relatrio. No h nenhum comando para definir uma varivel do SQL*Plus para seu valor default; voc deve saber o valor especfico ou efetuar logoff e login novamente. Se voc der um apelido sua coluna, dever fazer referncia ao nome do apelido, no ao nome da coluna.
Introduo ao Oracle: SQL e PL/SQL 8-19

O Comando COLUMN
Controla a exibio de uma coluna
COL[UMN] [{coluna|apelido} [opo]]

CLE[AR]: Limpa qualquer formato de coluna FOR[MAT] formato: Altera a exibio da coluna usando um modelo de formato HEA[DING] texto: Define o cabealho da coluna JUS[TIFY] {alinhamento}: Alinha o cabealho da coluna para a esquerda, o centro ou a direita
8-20 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Opes do Comando COLUMN


Opo CLE[AR] FOR[MAT] formato HEA[DING] texto JUS[TIFY] {alinhamento} NOPRI[NT] NUL[L] texto PRI[NT] TRU[NCATED] WRA[PPED] Descrio Limpa qualquer formato de coluna Altera a exibio dos dados da coluna Define o cabealho da coluna (Uma linha vertical (|) forar uma alimentao de linha no cabealho se voc no justificar.) Justifica o cabealho da coluna (no os dados) esquerda, ao centro ou direita Oculta a coluna Especifica o texto a ser exibido para valores nulos Mostra a coluna Trunca a string no final da primeira linha da exibio Quebra o final da string para a prxima linha

Introduo ao Oracle: SQL e PL/SQL 8-20

Usando o Comando COLUMN


Crie cabealhos de coluna.
COLUMN ename HEADING 'Employee|Name' FORMAT A15 COLUMN sal JUSTIFY LEFT FORMAT $99,990.00 COLUMN mgr FORMAT 999999999 NULL 'No manager'

Exiba a configurao atual para a coluna ENAME.


COLUMN ename

Limpe as configuraes para a coluna ENAME.


COLUMN ename CLEAR

8-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exibindo ou Limpando Configuraes Para mostrar ou limpar as configuraes do comando COLUMN atual, use os seguintes comandos:

Comando COL[UMN] coluna COL[UMN] COL[UMN] coluna CLE[AR] CLE[AR] COL[UMN]

Descrio Exibe as configuraes atuais para a coluna especificada Exibe as configuraes atuais para todas as colunas Limpa as configuraes para a coluna especificada Limpa as configuraes para todas as colunas

No caso de um comando longo, voc poder continu-lo na prxima linha ao encerrar a linha atual com um hfen (-).

Introduo ao Oracle: SQL e PL/SQL 8-21

Modelos de Formato COLUMN


Elemento Descrio An Define uma largura de exibio n Dgito de supresso de um nico zero Aplica o zero esquerda Cifro flutuante Moeda local Posio do ponto decimal Separador de milhar Exemplo N/A Resultado N/A

999999

1234

0 $ L . ,

099999 $9999 L9999 9999.99 9,999

01234 $1234 L1234 1234.00 1,234

8-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modelos de Formato COLUMN O slide exibe modelos de formato COLUMN de exemplo. O Oracle Server exibe uma string com sinais numricos (#) no lugar de um nmero inteiro cujos dgitos excedam o nmero de dgitos fornecidos no modelo de formato. Tambm exibe sinais numricos no lugar de um valor cujo modelo de formato seja alfanumrico, mas cujo valor real seja numrico.

Introduo ao Oracle: SQL e PL/SQL 8-22

Usando o Comando BREAK

Suprime duplicaes e seciona linhas Para suprimir duplicaes


SQL> BREAK ON ename ON job

Para secionar linhas em valores de quebra


SQL> BREAK ON ename SKIP 4 ON job SKIP 2

8-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Comando BREAK Use o comando BREAK para secionar linhas e suprimir valores duplicados. Para assegurar que o comando BREAK funcione efetivamente, use a clusula ORDER BY para ordenar as colunas que voc estiver quebrando. Sintaxe
BREAK on column[|alias|row] [skip n|dup|page] on .. [on report]

onde:

pgina ignora n

muda para uma nova pgina quando o valor de quebra alterado ignora o nmero de linhas n quando o valor de quebra alterado As quebras podem ser ativas em: Coluna Linha Pgina Relatrio

duplicar

exibe valores duplicados

Limpe todas as configuraes BREAK usando o comando CLEAR:


CLEAR BREAK

Introduo ao Oracle: SQL e PL/SQL 8-23

Usando os Comandos TTITLE e BTITLE


Exiba cabealhos e rodaps.
TTI[TLE] [texto|OFF|ON]

Defina o cabealho do relatrio.


SQL> TTITLE 'Salary|Report'

Defina o rodap do relatrio.


SQL> BTITLE 'Confidential'

8-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Os Comandos TTITLE e BTITLE Use o comando TTITLE para formatar cabealhos de pgina e o comando BTITLE para rodaps. Os rodaps aparecem na parte inferior da pgina, de acordo com o valor PAGESIZE. A sintaxe para BTITLE e TTITLE idntica. Somente a sintaxe para TTITLE mostrada. Voc pode usar a barra vertical (|) para dividir o texto do ttulo em vrias linhas. Na sintaxe: texto representa o texto do ttulo (Entre com aspas simples se o texto tiver mais de uma palavra.).

O exemplo com TTITLE no slide define o cabealho do relatrio para exibir Salary centralizado em uma linha e Report centralizado abaixo dele. O exemplo com BTITLE define o rodap do relatrio para exibir Confidential. TTITLE coloca a data e o nmero da pgina automaticamente no relatrio. Observao: O slide fornece uma sintaxe abreviada para TTITLE e BTITLE. Vrias opes para TTITLE e BTITLE so abordadas em outro curso SQL.

Introduo ao Oracle: SQL e PL/SQL 8-24

Criando um Arquivo de Script para Executar um Relatrio


1. Crie a instruo SQL SELECT. 2. Salve a instruo SELECT em um arquivo de script. 3. Carregue o arquivo de script em um editor. 4. Adicione comandos de formatao antes da instruo SELECT. 5. Verifique se o caractere de finalizao segue a instruo SELECT.
8-25 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando um Arquivo de Script para Executar um Relatrio Voc pode entrar com cada um dos comandos do SQL*Plus no prompt SQL ou colocar todos os comandos, inclusive a instruo SELECT, em um arquivo de comando (ou script). Um script tpico consiste em no mnimo uma instruo SELECT e vrios comandos do SQL*Plus. Como Criar um Arquivo de Script 1. Crie a instruo SQL SELECT no prompt SQL. Certifique-se de que os dados necessrios para o relatrio estejam precisos antes de voc salvar a instruo em um arquivo e aplicar os comandos de formatao. Certifique-se de que a clusula ORDER BY relevante esteja includa se voc desejar usar quebras. 2. Salve a instruo SELECT em um arquivo de script. 3. Edite o arquivo de script para informar os comandos do SQL*Plus. 4. Adicione os comandos de formatao necessrios antes da instruo SELECT. Certifique-se de no colocar comandos do SQL*Plus dentro da instruo SELECT. 5. Certifique-se de que a instruo SELECT seja seguida de um caractere de execuo: um pontoe-vrgula (;) ou uma barra (/).

Introduo ao Oracle: SQL e PL/SQL 8-25

Criando um Arquivo de Script para Executar um Relatrio


6. Limpe os comandos de formatao depois da instruo SELECT. 7. Salve o arquivo de script. 8. Entre com "START nome_do_arquivo" para executar o script.

8-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Como Criar um Arquivo de Script (continuao) 6. Adicione os comandos do SQL*Plus para apagar formato aps o caractere de execuo. Outra alternativa chamar um arquivo de redefinio que contenha todos os comandos de limpeza de formato. 7. Salve o arquivo de script com suas alteraes. 8. No SQL*Plus, execute o arquivo de script ao entrar com START nome_do_arquivo ou @ nome_do_arquivo. Esse comando necessrio para ler e executar o arquivo de script. Diretrizes Voc pode incluir linhas em branco entre os comandos do SQL*Plus em um script. possvel abreviar os comandos do SQL*Plus. Inclua os comandos de redefinio no final do arquivo para restaurar o ambiente SQL*Plus original.

REM representa um comentrio no SQL*Plus.

Introduo ao Oracle: SQL e PL/SQL 8-26

Exemplo de Relatrio
Fri Oct 24 Employee Report Job Category Employee Salary ----------------------- ----------------------- ----------------CLERK ADAMS $1,100.00 JAMES $950.00 MILLER $1,300.00 SMITH $800.00 MANAGER BLAKE $2,850.00 CLARK $2,450.00 JONES $2,975.00 SALESMAN ALLEN $1,600.00 MARTIN $1,250.00 TURNER $1,500.00 WARD $1,250.00 page 1

Confidential
8-27 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exemplo Crie um arquivo de script para elaborar um relatrio que exiba o cargo, o nome e o salrio de todo funcionrio cujo salrio seja menor que US$ 3.000. Adicione um cabealho centralizado de luas linhas em que se leia Employee Report e um rodap centralizado em que se leia Confidential. Renomeie a coluna do cargo como Job Category dividida em duas linhas. Renomeie a coluna do nome do funcionrio como Employee. Renomeie a coluna do salrio como Salary e formate-a como US$ 2.500,00.
SET PAGESIZE 37 SET LINESIZE 60 SET FEEDBACK OFF TTITLE 'Employee|Report' BTITLE 'Confidential' BREAK ON job COLUMN job HEADING 'Job|Category' FORMAT A15 COLUMN ename HEADING 'Employee' FORMAT A15 COLUMN sal HEADING 'Salary' FORMAT $99,999.99 REM ** Insert SELECT statement SELECT job, ename, sal FROM emp WHERE sal < 3000 ORDER BY job, ename / SET FEEDBACK ON REM clear all formatting commands ... Introduo ao Oracle: SQL e PL/SQL 8-27

Sumrio
Use as variveis de substituio do SQL*Plus para armazenar valores temporariamente. Use os comandos SET para controlar o ambiente SQL*Plus atual. Use o comando COLUMN para controlar a exibio de uma coluna. Use o comando BREAK para suprimir duplicaes e secionar linhas. Use TTITLE e BTITLE para exibir cabealhos e rodaps.
8-28 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio As variveis de substituio so teis para executar relatrios. Elas permitem flexibilidade para substituir valores em uma clusula WHERE, nomes de coluna e expresses. Voc pode personalizar relatrios criando arquivos de script com: Variveis de substituio de "e" comercial nico O comando ACCEPT O comando DEFINE O comando UNDEFINE Variveis de substituio na linha de comando COLUMN TTITLE BTITLE BREAK

Voc pode criar um relatrio mais legvel usando os seguintes comandos:

Introduo ao Oracle: SQL e PL/SQL 8-28

Viso Geral do Exerccio


Criando uma consulta para exibir valores usando variveis de substituio Iniciando um arquivo de comando contendo variveis Usando o comando ACCEPT

8-29

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Este exerccio lhe d a oportunidade de criar arquivos que podem ser executados interativamente atravs de variveis de substituio a fim de criar critrios de seleo em tempo de execuo.

Introduo ao Oracle: SQL e PL/SQL 8-29

Exerccio 8 Determine se as afirmaes a seguir so verdadeiras ou falsas: 1. Uma varivel de substituio de "e" comercial nico pedida no mximo uma vez. Verdadeiro/Falso 2. O comando ACCEPT um comando SQL. Verdadeiro/Falso 3. Crie um arquivo de script para exibir o nome do funcionrio, o cargo e a data de admisso de todos os funcionrios que tenham iniciado entre determinada faixa. Concatene o nome e o cargo juntos, separados por um espao e uma vrgula, e coloque um label na coluna Employees. Pea que o usurio fornea as duas faixas usando o comando ACCEPT. Use o formato MM/DD/AAAA. Salve o arquivo de script como p8q3.sql.
Please enter the low date range ('MM/DD/YYYY'): 01/01/1981 Please enter the high date range ('MM/DD/YYYY'): 01/01/1982 EMPLOYEES KING, PRESIDENT BLAKE, MANAGER CLARK, MANAGER JONES, MANAGER MARTIN, SALESMAN ALLEN, SALESMAN TURNER, SALESMAN JAMES, CLERK WARD, SALESMAN FORD, ANALYST 10 rows selected. HIREDATE 17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 ----------------- ---------------

4. Crie um script para exibir o nome do funcionrio, o cargo e o nome do departamento para uma determinada localizao. A condio de pesquisa deve aceitar pesquisas sem distino entre maisculas e minsculas para a localizao do departamento. Salve o arquivo de script como p8q4.sql.
Please enter the location name: Dallas EMPLOYEE NAME ------------JONES FORD SMITH SCOTT ADAMS JOB -----------MANAGER ANALYST CLERK ANALYST CLERK DEPARTMENT NAME --------------RESEARCH RESEARCH RESEARCH RESEARCH RESEARCH

Introduo ao Oracle: SQL e PL/SQL 8-30

Exerccio 8 (continuao) 5. Modifique p8q4.sql para criar um relatrio que contenha o nome do departamento, o nome do funcionrio, a data de admisso, o salrio e o salrio anual de cada funcionrio para todos os funcionrios em uma determinada localizao. Pea a localizao ao usurio. Coloque um label nas colunas DEPARTMENT NAME, EMPLOYEE NAME, START DATE, SALARY e ANNUAL SALARY, colocando os labels em vrias linhas. Salve novamente o script como p8q5.sql.
Please enter the location name: Chicago DEPARTMENT NAME ---------SALES EMPLOYEE NAME ----------BLAKE MARTIN ALLEN TURNER JAMES WARD START DATE --------01-MAY-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 SALARY --------$2,850.00 $1,250.00 $1,600.00 $1,500.00 $950.00 $1,250.00 ANNUAL SALARY ---------$34,200.00 $15,000.00 $19,200.00 $18,000.00 $11,400.00 $15,000.00

Introduo ao Oracle: SQL e PL/SQL 8-31

Introduo ao Oracle: SQL e PL/SQL 8-32

9
Manipulao de Dados

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever cada instruo DML Inserir linhas em uma tabela Atualizar linhas em uma tabela Deletar linhas de uma tabela Controlar transaes

9-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender como inserir linhas, atualizar e deletar linhas existentes em uma tabela. Voc tambm aprender como controlar transaes com as instrues COMMIT, SAVEPOINT e ROLLBACK.

Introduo ao Oracle: SQL e PL/SQL 9-2

DML (Data Manipulation Language)


Uma instruo DML executada quando voc:
Adiciona novas linhas a uma tabela Modifica linhas existentes em uma

tabela
Remove linhas existentes de uma tabela

Uma transao consiste em um conjunto de instrues DML que formam uma unidade lgica de trabalho.

9-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

DML (Data Manipulation Language) A DML (Data Manipulation Language) uma parte essencial do SQL. Quando voc quiser adicionar, atualizar ou deletar dados no banco de dados, execute uma instruo DML. Um conjunto de instrues DML que formam uma unidade lgica de trabalho chamada de transao. Considere um banco de dados bancrio. Quando o cliente de um banco transfere dinheiro de uma conta de poupana para uma conta corrente, a transao consiste em trs operaes separadas: diminuir a conta de poupana, aumentar a conta corrente e registrar a transao no lanamento da transao. O Oracle Server deve garantir que todas as trs instrues SQL sejam executadas para manter as contas com um saldo apropriado. Quando algo impedir que uma das instrues na transao seja executada, as outras instrues da transao devero ser desfeitas.

Introduo ao Oracle: SQL e PL/SQL 9-3

Adicionando uma Nova Linha em uma Tabela


50 DEVELOPMENT DETROIT 50 DEVELOPMENT DETROIT Nova linha DEPT DEPTNO -----10 20 30 40 DNAME LOC ---------- -------ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON

" inserir uma nova linha na tabela DEPT"


DEPT DEPTNO -----10 20 30 40 DNAME LOC ---------- -------ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO OPERATIONS BOSTON

50 DEVELOPMENT DETROIT
9-4 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando uma Nova Linha em uma Tabela O grfico do slide adiciona um novo departamento tabela DEPT.

Introduo ao Oracle: SQL e PL/SQL 9-4

A Instruo INSERT
Adicione novas linhas em uma tabela usando a instruo INSERT.
INSERT INTO VALUES

tabela [(coluna [, coluna...])] (valor [, valor...]);

Somente uma linha inserida por vez com esta sintaxe.

9-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando uma nova linha em uma Tabela (continuao) Voc pode adicionar novas linhas tabela emitindo a instruo INSERT. Na sintaxe: tabela coluna valor o nome da tabela is the name of the table o nome da coluna a ser preenchida o valor correspondente para a coluna

Observao: Esta instruo com a clusula VALUES adiciona somente uma linha por vez a uma tabela.

Introduo ao Oracle: SQL e PL/SQL 9-5

Inserindo Novas Linhas


Insira uma nova linha contendo valores para cada coluna. Liste valores na ordem default das colunas na tabela. Liste opcionalmente as colunas na clusula INSERT.
SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname, loc) (50, 'DEVELOPMENT', 'DETROIT');

Coloque os valores de data e caractere entre aspas simples.


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

Adicionando uma nova linha em uma Tabela (continuao) Como voc pode inserir uma nova linha que contenha valores para cada coluna, a lista de colunas no requerida na clusula INSERT. Entretanto, se voc no usar a lista de colunas, os valores devero ser listados de acordo com a ordem default das colunas na tabela.
SQL> DESCRIBE dept Type -----------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

Name Null? ------------------------------- -------DEPTNO NOT NULL DNAME LOC

Para clareza, use a lista de colunas na clusula INSERT. Coloque os valores de dados e caracteres entre aspas simples, no coloque valores numricos entre aspas simples.

Introduo ao Oracle: SQL e PL/SQL 9-6

Inserindo Linhas com Valores Nulos


Mtodo implcito: Omita a coluna da lista de colunas.
SQL> INSERT INTO 2 VALUES 1 row created. dept (deptno, dname ) (60, 'MIS');

Mtodo explcito: Especifique a palavrachave NULL.


SQL> INSERT INTO 2 VALUES 1 row created. dept (70, 'FINANCE', NULL);

9-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Mtodos para Inserir Valores Nulos


Mtodo Implcito Explcito Descrio Omite a coluna da lista de colunas. Especifica a palavra-chave NULL na lista VALUES. Especifica a string vazia ('') na lista VALUES; para strings de caractere e datas somente.

Certifique-se de que a coluna de destino permita valores nulos verificando o status Null? a partir do comando DESCRIBE do SQL*Plus. O Oracle Server impe automaticamente todas as restries de integridade de dados, tipos de dados e faixas de dados. Qualquer coluna que no esteja listada explicitamente obtm um valor nulo na nova linha.

Introduo ao Oracle: SQL e PL/SQL 9-7

Inserindo Valores Especiais


A funo SYSDATE registra a data e hora atuais.
SQL> INSERT INTO 2 3 4 VALUES 5 6 1 row created. emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) (7196, 'GREEN', 'SALESMAN', 7782, SYSDATE, 2000, NULL, 10);

9-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Inserindo Valores Especiais Usando Funes SQL Voc pode usar pseudocolunas para inserir valores especiais em sua tabela. O exemplo do slide registra informaes para o funcionrio Green na tabela EMP. Ele fornece a data e hora atuais na coluna HIREDATE. Ele usa a funo SYSDATE para data e hora atuais. Voc tambm poder usar a funo USER ao inserir linhas em uma tabela. A funo USER registra o nome de usurio atual. Confirmando Adies Tabela
SQL> SELECT 2 FROM 3 WHERE EMPNO --------7196 empno, ename, job, hiredate, comm emp empno = 7196; JOB HIREDATE COMM

ENAME

---------- --------- --------- --------GREEN SALESMAN 01-DEC-97

Introduo ao Oracle: SQL e PL/SQL 9-8

Inserindo Valores Especficos de Data


Adicionar um novo funcionrio.
SQL> INSERT INTO 2 VALUES 3 4 1 row created. emp (2296,'AROMANO','SALESMAN',7782, TO_DATE('FEB 3, 1997', 'MON DD, YYYY'), 1300, NULL, 10);

Verifique sua adio.


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ------- -------- ---- --------- ---- ---- -----2296 AROMANO SALESMAN 7782 03-FEB-97 1300 10

9-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Inserindo Valores Especficos de Data e Hora O formato DD-MON-YY geralmente usado para inserir um valor de data. Com este formato, lembre-se que o sculo atual o default. Como a data tambm contm informaes sobre a hora, a hora default meia-noite (00:00:00). Se uma data tiver que ser informada em um formato diferente do default por exemplo, outro sculo e/ou uma hora especfica voc deve usar a funo TO_DATE. O exemplo no slide registra informaes para o funcionrio Aromano na tabela EMP. Ele define a coluna HIREDATE como 3 de fevereiro de 1997. Se o formato RR estiver definido, o sculo pode no ser o atual.

Introduo ao Oracle: SQL e PL/SQL 9-9

Inserindo Valores Usando Variveis de Substituio


Crie um script interativo usando parmetros de substituio do SQL*Plus.
SQL> INSERT INTO 2 VALUES 3 dept (deptno, dname, loc) (&department_id, '&department_name', '&location');

Enter value for department_id: 80 Enter value for department_name: EDUCATION Enter value for location: ATLANTA 1 row created.

9-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Inserindo Valores Usando Variveis de Substituio Voc pode produzir uma instruo INSERT que permite que o usurio adicione valores interativamente usando as variveis de substituio do SQL*Plus. O exemplo do slide registra informaes para um departamento na tabela DEPT. Ele solicita ao usurio o nmero do departamento, nome do departamento e localizao. Para valores de data e caractere, o "e" comercial e o nome da varivel aparecem entre aspas simples.

Introduo ao Oracle: SQL e PL/SQL 9-10

Criando um Script com Prompts Personalizados


ACCEPT armazena o valor em uma varivel. PROMPT exibe o texto personalizado.
ACCEPT ACCEPT ACCEPT INSERT INTO VALUES department_id PROMPT 'Please enter the department number:' department_name PROMPT 'Please enter the department name:' location PROMPT 'Please enter the location:' dept (deptno, dname, loc) (&department_id, '&department_name', '&location');

9-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando um Script para Manipular Dados Voc pode salvar o seu comando com variveis de substituio em um arquivo e execut-lo. Cada vez que voc executar o comando, ele ir solicitar novos valores. Personalize os prompts usando o comando ACCEPT do SQL*Plus. O exemplo no slide registra informaes para um departamento na tabela DEPT. Ele solicita ao usurio o nmero do departamento, o nome do departamento e a localizao usando mensagens de prompt personalizadas.
Please enter the department number: 90 Please enter the department name: PAYROLL Please enter the location: HOUSTON 1 row created.

No preceda o parmetro de substituio do SQL*Plus com o "e" comercial (&) ao fazer referncia a ele no comando ACCEPT. Use um trao (-) para continuar com um comando do SQL*Plus na prxima linha.

Introduo ao Oracle: SQL e PL/SQL 9-11

Copiando Linhas a partir de Outra Tabela


Crie a instruo INSERT com uma subconsulta.
SQL> INSERT INTO managers(id, name, salary, hiredate) 2 SELECT empno, ename, sal, hiredate 3 FROM emp 4 WHERE job = 'MANAGER'; 3 rows created.

No use a clusula VALUES. Faa a correspondncia do nmero de colunas na clusula INSERT com o nmero de colunas na subconsulta.
9-12 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Copiando Linhas a partir de Outra Tabela Voc pode usar a instruo INSERT para adicionar linhas a uma tabela onde os valores so derivados de tabelas existentes. No lugar da clusula VALUES, use uma subconsulta. Sintaxe
INSERT INTO tabela [ coluna (, coluna) ] subconsulta;

onde:

tabela coluna subconsulta

o nome da tabela o nome da coluna a ser preenchida a subconsulta que retorna linhas na tabela

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "SELECT". seo Subqueries. O nmero de colunas e seus tipos de dados na lista de colunas da clusula INSERT devem coincidir com o nmero de valores e seus tipos de dados na subconsulta.

Introduo ao Oracle: SQL e PL/SQL 9-12

EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES

Alterando os Dados em uma Tabela


JOB PRESIDENT MANAGER MANAGER MANAGER EMP EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES JOB PRESIDENT MANAGER MANAGER MANAGER ... DEPTNO 10 30 20 10 20 ... DEPTNO 10 30 10 20

"atualize uma linha em uma tabela EMP"

9-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Alterando os Dados em uma Tabela O grfico do slide altera o nmero do departamento de Clark de 10 para 20.

Introduo ao Oracle: SQL e PL/SQL 9-13

A instruo UPDATE
Modifique linhas existentes com a instruo UPDATE.
UPDATE SET [WHERE

tabela coluna = valor [, coluna = valor, ...] condio];

Atualize mais de uma linha por vez, se necessrio.

9-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Atualizando Linhas Voc pode modificar linhas existentes usando a instruo UPDATE. Na sintaxe acima: tabela coluna valor condio o nome da tabela o nome da coluna a ser preenchida o valor correspondente ou subconsulta para a coluna identifica as linhas a serem atualizadas e composto de nomes de colunas expresses, constantes, subconsultas e operadores de comparao

Confirme a operao de atualizao consultando a tabela para exibir as linhas atualizadas. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "UPDATE". Observao: Em geral, use a chave primria para identificar uma nica linha. Vrias linhas podero ser atualizadas inesperadamente se outras colunas forem usadas. Por exemplo, identificar uma nica linha na tabela EMP por nome perigoso porque mais de um funcionrio pode ter o mesmo nome.

Introduo ao Oracle: SQL e PL/SQL 9-14

Atualizando Linhas em uma Tabela


Uma linha ou linhas especficas so modificadas quando voc especifica a clusula WHERE.
SQL> UPDATE emp 2 SET deptno = 20 3 WHERE empno = 7782; 1 row updated.

Todas as linhas na tabela so modificadas quando voc omite a clusula WHERE.


SQL> UPDATE employee 2 SET deptno = 20; 14 rows updated.
9-15 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Atualizando Linhas (continuao) A instruo UPDATE modifica linhas especficas, se a clusula WHERE for especificada. O exemplo do slide transfere o funcionrio 7782 (Clark) para o departamento 20. Se voc omitir a clusula WHERE, todas as linhas na tabela sero modificadas.
SQL> SELECT 2 FROM ename, deptno employee;

ENAME DEPTNO ---------- --------KING 20 BLAKE 20 CLARK 20 JONES 20 MARTIN 20 ALLEN 20 TURNER 20 ... 14 rows selected.

Observao: A tabela EMPLOYEE possui os mesmos dados que a tabela EMP.


Introduo ao Oracle: SQL e PL/SQL 9-15

Atualizando com Subconsulta de Vrias Colunas


Atualize o cargo e o departamento do funcionrio 7698 para coincidir com o do funcionrio 7499.
SQL> UPDATE emp 2 SET (job, deptno) = 3 (SELECT job, deptno 4 FROM emp 5 WHERE empno = 7499) 6 WHERE empno = 7698; 1 row updated.

9-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Atualizando com Subconsulta de Vrias Colunas Subconsultas de vrias colunas podem ser implementadas na clusula SET de uma instruo UPDATE. Sintaxe
UPDATE tabela SET (coluna, coluna, ...) = (SELECT coluna, coluna, ... FROM tabela WHERE condio) WHERE condio;

Introduo ao Oracle: SQL e PL/SQL 9-16

Atualizando Linhas Baseadas em Outra Tabela


Use subconsultas em instrues UPDATE para atualizar linhas em uma tabela baseada em valores de outra tabela.
SQL> UPDATE employee 2 SET deptno = 3 4 5 WHERE job = 6 7 2 rows updated. (SELECT FROM WHERE (SELECT FROM WHERE deptno emp empno = 7788) job emp empno = 7788);

9-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Atualizando Linhas Baseadas em Outra Tabela Voc pode usar subconsultas em instrues UPDATE para atualizar linhas em uma tabela. O exemplo no slide atualiza a tabela EMPLOYEE baseada nos valores da tabela EMP. Isso altera o nmero do departamento de todos os funcionrios com o cargo do funcionrio 7788 para o nmero do departamento atual do funcionrio 7788.

Introduo ao Oracle: SQL e PL/SQL 9-17

Atualizando Linhas: Erro de Restrio de Integridade


SQL> UPDATE 2 SET 3 WHERE emp deptno = 55 deptno = 10;

UPDATE emp e * o ERROR at line 1: N ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK) violated - parent key not found

e ist x

er

d de

m rta pa

en

to

55

9-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Erro de Restrio de Integridade Se tentar atualizar um registro com um valor vinculado a uma restrio de integridade, voc causar um erro. No exemplo no slide, o nmero de departamento 55 no existe na tabela me, DEPT, assim voc no receber a violao da chave me ORA-02291. Observao: As restries de integridade garantem que os dados obedeam a um conjunto predefinido de regras. Uma lio subseqente ir abordar as restries de integridade com mais detalhes.

Introduo ao Oracle: SQL e PL/SQL 9-18

Removendo uma Linha de uma Tabela


DEPT DEPTNO -----10 20 30 40 50 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON DEVELOPMENT DETROIT MIS

" remova uma linha da tabela DEPT"


DEPT DEPTNO -----10 20 30 40 60 ... DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS MIS LOC -------NEW YORK DALLAS CHICAGO BOSTON

9-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Removendo uma Linha de uma Tabela O grfico do slide remove o departamento DEVELOPMENT da tabela DEPT (pressupondo que no h restries definidas na tabela DEPT).

Introduo ao Oracle: SQL e PL/SQL 9-19

A Instruo DELETE
Voc pode remover linhas existentes de uma tabela usando a instruo DELETE.
DELETE [FROM] [WHERE

tabela condio];

9-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Deletando Linhas Voc pode remover linhas existentes usando a instruo DELETE. Na sintaxe: tabela condio o nome da tabela identifica as linhas a serem deletadas e composta de nomes de colunas, expresses, constantes, subconsultas e operadores de comparao

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DELETE".

Introduo ao Oracle: SQL e PL/SQL 9-20

Deletando Linhas de uma Tabela


Linhas especficas so deletadas quando voc especifica a clusula WHERE.
SQL> DELETE FROM 2 WHERE 1 row deleted. department dname = 'DEVELOPMENT';

Todas as linhas na tabela sero deletadas se voc omitir a clusula WHERE.


SQL> DELETE FROM 4 rows deleted. department;

9-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Deletando Linhas (continuao) Voc pode deletar determinadas linhas especificando a clusula WHERE na instruo DELETE. O exemplo do slide deleta o departamento DEVELOPMENT da tabela DEPARTMENT. Voc pode confirmar essa operao exibindo as linhas deletadas usando a instruo SELECT.
SQL> SELECT * 2 FROM department 3 WHERE dname = 'DEVELOPMENT'; no rows selected.

Exemplo Remova todos os funcionrios que iniciaram aps 1 de janeiro de 1997.


SQL> DELETE FROM 2 WHERE 1 row deleted. emp hiredate > TO_DATE('01.01.1997', 'DD.MM.YYYY');

Se voc omitir a clusula WHERE, todas as linhas na tabela sero deletadas. O segundo exemplo no slide deleta todas as linhas da tabela DEPARTMENT porque nenhuma clusula WHERE foi especificada. Observao: A tabela DEPARTMENT possui os mesmos dados que a tabela DEPT.

Introduo ao Oracle: SQL e PL/SQL 9-21

Deletando Linhas Baseadas em Outra Tabela


Use subconsultas em instrues DELETE para remover linhas de uma tabela baseadas em valores de outra tabela.
SQL> DELETE FROM 2 WHERE 3 4 5 6 rows deleted. employee deptno = (SELECT FROM WHERE

deptno dept dname ='SALES');

9-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Deletando Linhas Baseadas em Outra Tabela Voc pode usar subconsultas para deletar linhas de uma tabela baseadas em valores de outra tabela. O exemplo no slide deleta todos os funcionrios que estejam no departamento 30. A subconsulta procura a tabela DEPT para localizar o nmero de departamento para o departamento SALES. A subconsulta ento alimenta o nmero de departamento para a consulta principal, que deleta linhas de dados da tabela EMPLOYEE baseada nesse nmero de departamento.

Introduo ao Oracle: SQL e PL/SQL 9-22

Deletando Linhas: Erro de Restrio de Integridade


SQL> DELETE FROM 2 WHERE

DELETE FROM dept * ERROR at line 1: ORA-02292: integrity constraint (USR.EMP_DEPTNO_FK) violated - child record found

ha a lin ria dept um im tar deptno = 10; pr ele e d chave ngeira pod ma tra o n a u ave es . h Voc onten o ch abela t c m que ada co outra em us

9-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Erro de Restrio de Integridade Se tentar deletar um registro com um valor vinculado a uma restrio de integridade, voc causar um erro. O exemplo no slide tenta deletar o nmero de departamento 10 da tabela DEPT, o que resulta em um erro porque o nmero de departamento usado como uma chave estrangeira na tabela EMP. Se o registro pai que voc tentar deletar tiver registros filhos, voc receber a violao de registro filho encontrada ORA-02292.

Introduo ao Oracle: SQL e PL/SQL 9-23

Transaes de Banco de Dados


Consistem de uma das seguintes instrues: Instrues DML que fazem uma alterao consistente nos dados Uma instruo DDL Uma instruo DCL

9-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Transaes de Banco de Dados O Oracle Server garante consistncia de dados baseada em transaes. As transaes lhe do mais flexibilidade e controle ao alterar dados e garantem a consistncia de dados no caso de falha do usurio ou do sistema. As transaes consistem de instrues DML que faam uma alterao consistente nos dados. Por exemplo, uma transferncia de fundos entre duas contas deve incluir o dbito em uma conta e o crdito em outra com mesma quantia. Ambas as aes devem falhar ou ter xito juntas. O crdito no deve ser processado sem o dbito. Tipos de Transao
Tipo Data manipulation language (DML) Data definition language (DDL) Data control language (DCL) Descrio Consiste de qualquer nmero de instrues DML que o Oracle Server trata como uma nica entidade ou unidade lgica de trabalho Consiste de apenas uma instruo DDL Consiste de apenas uma instruo DCL

Introduo ao Oracle: SQL e PL/SQL 9-24

Transaes de Banco de Dados


Comea quando for executada a primeira instruo SQL executvel Termina com um dos seguintes eventos:
COMMIT ou ROLLBACK emitida Instruo DDL ou DCL executada

(commit automtico)
O usurio sai O sistema cai

9-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Quando uma Transao Inicia e Termina? Uma transao inicia quando a primeira instruo SQL executvel for encontrada e termina quando ocorrer uma das seguinte situaes: Uma instruo COMMIT ou ROLLBACK for emitida Uma instruo DDL, como CREATE, for emitida Uma instruo DCL for emitida O usurio sair do SQL*Plus Houver uma falha no computador ou o sistema cair

Depois que uma transao termina, a prxima instruo SQL executvel automaticamente inicia a prxima transao. Uma instruo DDL ou DCL automaticamente processada e, portanto, finaliza implicitamente uma transao.

Introduo ao Oracle: SQL e PL/SQL 9-25

Vantagens das Instrues COMMIT e ROLLBACK


Garantir consistncia de dados Visualizar alteraes nos dados antes de fazer as alteraes permanentemente Agrupar operaes relacionadas logicamente

9-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Introduo ao Oracle: SQL e PL/SQL 9-26

Controlando Transaes
Transao

INSERT INSERT
COMMIT

UPDATE UPDATE

INSERT INSERT

DELETE DELETE

Savepoint A

Savepoint B

ROLLBACK para Savepoint B

ROLLBACK para Savepoint A

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

Instrues de Controle de Transao Explcita Voc pode controlar a lgica das transaes usando as instrues COMMIT, SAVEPOINT e ROLLBACK.
Instruo COMMIT SAVEPOINT nome ROLLBACK [TO SAVEPOINT nome] Descrio Finaliza a transao atual tornando permanentes todas as alteraes de dados pendentes Marca um ponto de gravao dentro da transao atual ROLLBACK finaliza a transao atual descartando todas as alteraes de dados pendentes; ROLLBACK TO SAVEPOINT descarta a transao atual para o ponto de gravao especfico, descartando assim o ponto de gravao e quaisquer alteraes subseqentes. Se voc omitir essa clusula, a instruo ROLLBACK descarta toda a transao.

Observao: SAVEPOINT no uma SQL padro de ANSI.

Introduo ao Oracle: SQL e PL/SQL 9-27

Processando Transaes Implcitas


Um commit automtico ocorre sob as seguintes circunstncias: A instruo DDL emitida A instruo DCL emitida A sada normal do SQL*Plus, sem emitir explicitamente COMMIT ou ROLLBACK Um rollback automtico ocorre quando h uma finalizao anormal do SQL*Plus ou queda do sistema.

9-28

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Processando Transaes Implcitas


Status Processamento automtico Rollback automtico Circunstncias As instrues DDL ou DCL so emitidas Sada normal do SQL*Plus, sem emitir explicitamente COMMIT ou ROLLBACK Finalizao anormal do SQL*Plus ou queda do sistema

Observao: H um terceiro comando disponvel no SQL*Plus. O comando AUTOCOMMIT pode ser alternado entre ON ou OFF. Se for definido como ON, cada instruo DML individual ser processada assim que for executada. Voc no pode fazer roll back das alteraes. Se for definido como OFF, COMMIT poder ser emitido explicitamente. Alm disso, COMMIT emitido quando uma instruo DLL emitida ou quando voc sai do SQL*Plus. Falhas do Sistema Quando uma transao interrompida por uma falha do sistema, faz-se automaticamente roll back de toda a transao. Isso impede que o erro faa alteraes no desejadas nos dados e retorna as tabelas ao seu estado no momento do ltimo commit. Dessa forma, o Oracle Server protege a integridade das tabelas.

Introduo ao Oracle: SQL e PL/SQL 9-28

Estado dos Dados Antes de COMMIT ou ROLLBACK


O estado anterior dos dados pode ser recuperado. O usurio atual pode revisar os resultados das operaes DML usando a instruo SELECT. Outros usurios no podero ver os resultados das instrues DML do usurio atual. As linhas afetadas so bloqueadas, outros usurios no podero alterar os dados dentro das linhas afetadas.
9-29 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Submetendo Alteraes a Commit Todas as alteraes feitas nos dados durante a transao so temporrias at que a transao seja processada. Estado dos dados antes que COMMIT ou ROLLBACK seja emitido: As operaes de manipulao de dados afetam primeiramente o buffer do banco de dados, assim, o estado anterior dos dados pode ser recuperado. O usurio atual pode revisar os resultados das operaes de manipulao de dados consultando as tabelas. Os outros usurios no podero exibir os resultados das operaes de manipulao de dados feitas pelo usurio atual. O Oracle Server institui a consistncia na leitura para garantir que cada usurio veja os dados como eram no ltimo commit. As linhas afetadas so bloqueadas, os outros usurios no podero alterar os dados nas linhas afetadas.

Introduo ao Oracle: SQL e PL/SQL 9-29

Estado dos Dados Aps COMMIT


As alteraes nos dados so feitas permanentemente no banco de dados. O estado anterior dos dados perdido permanentemente. Todos os usurios podem ver os resultados. As linhas afetadas so desbloqueadas, essas linhas esto disponveis para serem manipuladas por outros usurios. Todos os savepoints so apagados.

9-30

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Submetendo Alteraes a Commit (continuao) Torne permanentes todas as alteraes pendentes usando a instruo COMMIT. Aps COMMIT: O estado dos dados aps emitir uma COMMIT: As alteraes nos dados so gravadas no banco de dados. O estado anterior dos dados perdido permanentemente. Todos os usurios podem exibir os resultados da transao. As linhas afetadas so desbloqueadas, as linhas esto agora disponveis para outros usurios executarem as novas alteraes nos dados. Todos os savepoints so apagados.

Introduo ao Oracle: SQL e PL/SQL 9-30

Submetendo Dados a Commit


Fazer as alteraes.
SQL> UPDATE emp 2 SET deptno = 10 3 WHERE empno = 7782; 1 row updated.

Submeter alteraes a commit.


SQL> COMMIT; Commit complete.

9-31

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Submetendo Alteraes a Commit (continuao) O exemplo do slide atualiza a tabela EMP e define o nmero de departamento para o funcionrio 7782 (Clark) como 10. Ele depois torna a alterao permanente emitindo a instruo COMMIT. Exemplo Crie um novo departamento ADVERTISING com pelo menos um funcionrio. Torne permanentes as alteraes nos dados. SQL> INSERT INTO department(deptno, dname, loc) 2 VALUES (50, 'ADVERTISING', 'MIAMI'); 1 row created.
SQL> UPDATE employee 2 SET deptno = 50 3 WHERE empno = 7876; 1 row updated. SQL> COMMIT; Commit complete.

Introduo ao Oracle: SQL e PL/SQL 9-31

Estado dos Dados Aps ROLLBACK


Descarte todas as alteraes pendentes usando a instruo ROLLBACK. As alteraes nos dados so desfeitas. O estado anterior dos dados restaurado. As linhas afetadas so desbloqueadas.
SQL> DELETE FROM 14 rows deleted. SQL> ROLLBACK; Rollback complete. employee;

9-32

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Fazendo Roll Back de Alteraes Descarte todas as alteraes pendentes usando a instruo ROLLBACK. Aps ROLLBACK: As alteraes nos dados so desfeitas. O estado anterior dos dados restaurado. As linhas afetadas so desbloqueadas.

Exemplo Ao tentar remover um registro da tabela TEST, voc pode acidentalmente esvaziar a tabela. Voc pode corrigir o erro, emitir novamente a instruo apropriada e tornar permanentes as alteraes dos dados. SQL> DELETE FROM test; 25,000 rows deleted. SQL> ROLLBACK; Rollback complete. SQL> DELETE FROM test 2 WHERE id = 100; 1 row deleted. SQL> SELECT * 2 FROM test 3 WHERE id = 100; No rows selected. SQL> COMMIT; Commit complete.
Introduo ao Oracle: SQL e PL/SQL 9-32

Fazendo Roll Back de Alteraes para um Marcador


Crie um marcador em uma transao atual usando a instruo SAVEPOINT. Faa roll back do marcador usando a instruo ROLLBACK TO SAVEPOINT.
SQL> UPDATE... SQL> SAVEPOINT update_done; Savepoint created. SQL> INSERT... SQL> ROLLBACK TO update_done; Rollback complete.

9-33

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Fazendo Roll Back de Alteraes para um Savepoint Voc pode criar um marcador na transao atual usando a instruo SAVEPOINT. Dessa forma, a transao poder ser dividida em sees menores. Voc poder ento descartar as alteraes pendentes at aquele marcador usando a instruo ROLLBACK TO SAVEPOINT. Se voc criar um segundo savepoint com o mesmo nome que o anterior, o anterior ser deletado.

Introduo ao Oracle: SQL e PL/SQL 9-33

Rollback no Nvel da Instruo


Se uma nica instruo DML falhar durante a execuo, ser feito roll back somente dessa instruo. O Oracle Server implementa um savepoint implcito. Todas as outras alteraes so mantidas. O usurio deve finalizar as transaes explicitamente usando uma instruo COMMIT ou ROLLBACK.
9-34 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Rollback no Nvel da Instruo Parte da transao pode ser descartada por um rollback implcito se for detectado um erro na execuo da instruo. Se uma nica instruo DML falhar durante a execuo de uma transao, seu efeito ser desfeito por um rollback no nvel da instruo, mas as alteraes feitas pelas instrues DML anteriores na transao no sero descartadas. Somente o usurio poder fazer o roll back ou process-las. O Oracle emite uma instruo COMMIT implcita antes e aps qualquer instruo DDL (Data Definition Language). Assim, mesmo que a instruo DDL no seja executada com xito, voc no poder fazer roll back da instruo anterior porque o servidor emitiu um commit. Finalize suas transaes explicitamente executando uma instruo COMMIT ou ROLLBACK.

Introduo ao Oracle: SQL e PL/SQL 9-34

Consistncia na Leitura
A consistncia na leitura garante sempre uma exibio consistente dos dados. As alteraes feitas por um usurio no entram em conflito com as alteraes feitas por outro usurio. A consistncia na leitura garante que nos mesmos dados:
Os leitores no esperem pelos autores Os autores no esperem pelos leitores

9-35

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Consistncia na Leitura Os usurios de bancos de dados fazem dois tipos de acesso ao banco de dados: Operaes de leitura (instruo SELECT) Operaes de gravao (instrues INSERT, UPDATE, DELETE) O leitor e autor do banco de dados tenham garantia de uma exibio consistente dos dados. Os leitores no vejam os dados que estejam sendo alterados. Os autores tenham garantia de que as alteraes no banco de dados sejam feitas de forma consistente. As alteraes feitas por um autor no interrompam ou entrem em conflito com as alteraes que outro autor esteja fazendo.

Voc precisa de consistncia na leitura para que ocorra o seguinte:

O objetivo da consistncia na leitura garantir que cada usurio veja os dados como eles eram no ltimo commit, antes da operao DML iniciar.

Introduo ao Oracle: SQL e PL/SQL 9-35

Implementao da Consistncia na Leitura


UPDATE emp SET sal = 2000 WHERE ename = 'SCOTT';

Blocos de dados Segmentos de rollback

Usurio A
SELECT * FROM emp; dados alterados e dados intactos antes de alterar dados "antigos"

Imagem da consistncia na leitura

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

Implementao da Consistncia na Leitura A consistncia na leitura uma implementao automtica. Ela mantm uma cpia parcial do banco de dados em segmentos de rollback. Quando uma operao de insero, atualizao ou excluso feita no banco de dados, o Oracle Server tira uma cpia dos dados antes de serem alterados e os grava no segmento de rollback. Todos os leitores, exceto o que fez a alterao, ainda visualizam o banco de dados como era antes do incio das alteraes, eles visualizam um "instantneo" dos segmentos de rollback dos dados. Antes das alteraes serem processadas no banco de dados, somente o usurio que est modificando os dados v o banco de dados com as alteraes, todas as outras pessoas vem o instantneo no segmento de rollback. Isso garante que os leitores dos dados leiam dados consistentes que no estejam sendo alterados no momento. Quando uma instruo DML processada, a alterao feita no banco de dados torna-se visvel a qualquer pessoa que execute a instruo SELECT. O espao ocupado pelos dados "antigos" no arquivo do segmento de rollback liberado para ser utilizado novamente. Se for feito o roll back da transao, as alteraes sero desfeitas. A verso original, mais antiga, dos dados no segmento de rollback gravada de volta na tabela. Todos os usurios vem o banco de dados como ele era antes da transao iniciar.

Introduo ao Oracle: SQL e PL/SQL 9-36

Bloqueando
Bloqueios do Oracle: Impedem a interao destrutiva entre transaes simultneas No requerem ao do usurio Usam automaticamente o nvel mais baixo de restrio So mantidos durante a durao da transao H dois modos bsicos: Exclusivo Compartilhado

9-37

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Que So Bloqueios? Bloqueios so mecanismos que impedem a interao destrutiva entre transaes que acessem o mesmo recurso: um objeto de usurio (como tabelas ou linhas) ou objetos do sistema no visveis aos usurios (como estruturas de dados compartilhados e linhas de dicionrios de dados). Como o Oracle Bloqueia os Dados O bloqueio em um banco de dados do Oracle totalmente automtico e no requer ao do usurio. O bloqueio implcito ocorre para todas as instrues SQL exceto SELECT. O mecanismo de bloqueio default do Oracle automaticamente usa o nvel mais inferior da restrio aplicvel, fornecendo assim o maior grau de simultaneidade e mxima integridade de dados. O Oracle tambm permite que o usurio bloqueie os dados manualmente. Modos de Bloqueio O Oracle usa dois modos de bloqueio em um banco de dados de vrios usurios:
Modo de Bloqueio exclusivo Descrio Impede que um recurso seja compartilhado. A primeira transao que bloquear um recurso exclusivamente ser a nica alterao que poder alter-lo at ser liberado. Permite que o recurso seja compartilhado. Vrios usurios que leiam os dados podem compartilhar esses dados, mantendo os bloqueios compartilhados para impedir o acesso simultneo por um escritor (que precisa de um bloqueio exclusivo). Vrias transaes podem adquirir bloqueios compartilhados no mesmo.

bloqueio compartilhado

Introduo ao Oracle: SQL e PL/SQL 9-37

Sumrio
Instruo INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK Descrio Adiciona uma nova linha tabela Modifica linhas existentes na tabela Remove linhas existentes da tabela Torna permanente todas as alteraes pendentes Permite um rollback no marcador do savepoint Descarta todas as alteraes nos dados pendentes

9-38

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio Manipule dados no banco de dados do Oracle usando as instrues INSERT, UPDATE e DELETE. Controle as alteraes nos dados usando as instrues COMMIT, SAVEPOINT e ROLLBACK. O Oracle Server garante uma exibio consistente dos dados sempre. O bloqueio pode ser implcito ou explcito.

Introduo ao Oracle: SQL e PL/SQL 9-38

Viso Geral do Exerccio


Inserindo linhas nas tabelas Atualizando e deletando linhas na tabela Controlando transaes

9-39

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc ir adicionar linhas tabela MY_EMPLOYEE, atualizar e deletar dados da tabela e controlar suas transaes.

Introduo ao Oracle: SQL e PL/SQL 9-39

Exerccio 9 Insira os dados na tabela MY_EMPLOYEE. 1. Execute o script lab9_1.sql para criar a tabela MY_EMPLOYEE que ser usada para o lab. 2. Descreva a estrutura da tabela MY_EMPLOYEE para identificar os nomes de coluna.
Name ID LAST_NAME FIRST_NAME USERID SALARY Null? NOT NULL Type NUMBER(4) VARCHAR2(25) VARCHAR2(25) VARCHAR2(8) NUMBER(9,2)

------------ --------- ------

3. Adicione a primeira linha de dados tabela MY_EMPLOYEE a partir dos dados do exemplo a seguir. No liste as colunas na clusula INSERT.
ID 1 2 3 4 5 LAST_NAME Patel Dancs Biri Newman Ropeburn FIRST_NAME Ralph Betty Ben Chad Audry USERID rpatel bdancs bbiri cnewman aropebur SALARY 795 860 1100 750 1550

4. Preencha a tabela MY_EMPLOYEE com uma segunda linha de dados de exemplo da lista anterior. Desta vez, liste as colunas explicitamente na clusula INSERT. 5. Confirme a adio tabela.
ID --1 2 LAST_NAME ----------Patel Dancs FIRST_NAME ---------Ralph Betty USERID -----rpatel bdancs SALARY -----795 860

Introduo ao Oracle: SQL e PL/SQL 9-40

Exerccio 9 (continuao) 6. Crie um script chamado loademp.sql para carregar linhas na tabela MY_EMPLOYEE de modo interativo. Solicite ao usurio a identificao, o nome, o sobrenome e o salrio do funcionrio. Concatene a primeira letra do primeiro nome e os sete primeiros caracteres do ltimo nome para produzir a identificao do usurio. 7. Preencha a tabela com as duas linhas de dados de exemplo a seguir, executando o script que voc criou. 8. Confirme as adies tabela.
ID 1 2 3 4 LAST_NAME Patel Dancs Biri Newman FIRST_NAME USERID Ralph Betty Ben Chad rpatel bdancs bbiri cnewman SALARY -----795 860 1100 750

--- ---------- ---------- ------

9. Torne essas adies permanentes. Atualize e delete os dados da tabela MY_EMPLOYEE. 10. Altere o sobrenome do funcionrio 3 para Drexler. 11. Altere o salrio para 1000 de todos os funcionrios que ganhem menos de 900. 12. Verifique as alteraes na tabela.
LAST_NAME SALARY --------- -----Patel 1000 Dancs 1000 Drexler 1100 Newman 1000

13. Delete Betty Dancs da tabela MY_EMPLOYEE. 14. Confirme as alteraes na tabela.
ID --1 3 4 LAST_NAME ---------Patel Drexler Newman FIRST_NAME ---------Ralph Ben Chad USERID SALARY ------ -----rpatel 1000 bbiri 1100 cnewman 1000

Introduo ao Oracle: SQL e PL/SQL 9-41

Exerccio 9 (continuao) 15. Faa um commit de todas as alteraes pendentes. Controle as transaes de dados na tabela MY_EMPLOYEE. 16. Preencha a tabela com a ltima linha de dados de exemplo, executando o script que voc criou na etapa 6. 17. Confirme a adio tabela.
ID --1 3 4 5 LAST_NAME --------Patel Drexler Newman Ropeburn FIRST_NAME ----------Ralph Ben Chad Audry USERID SALARY -------- -----rpatel 1000 bbiri 1100 cnewman 1000 aropebur 1550

18. Marque um ponto intermedirio no processamento da transao. 19. Esvazie a tabela inteira. 20. Confirme se a tabela est vazia. 21. Descarte a operao DELETE mais recente sem descartar a operao INSERT anterior. 22. Confirme se a nova linha ainda est inalterada.
ID --1 3 4 5 LAST_NAME --------Patel Drexler Newman Ropeburn FIRST_NAME USERID SALARY ---------- --------------Ralph rpatel 1000 Ben bbiri 1100 Chad cnewman 1000 Audry aropebur 1550

23. Torne a adio de dados permanente.

Introduo ao Oracle: SQL e PL/SQL 9-42

10
Criando e Gerenciando Tabelas

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever os principais objetos do banco de dados Criar tabelas Descrever os tipos de dados que podem ser usados ao especificar a definio da coluna Alterar definies de tabela Eliminar, renomear e truncar tabelas
10-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender sobre os principais objetos do banco de dados e o relacionamento entre eles. Voc tambm aprender como criar, alterar e eliminar tabelas.

Introduo ao Oracle: SQL e PL/SQL 10-2

Objetos do Banco de Dados


Objeto Tabela View Seqncia ndice Sinnimo Descrio Unidade bsica de armazenamento, composta de linhas uma ou mais tabelas Representa logicamente subconjuntos de dados de uma ou mais tabelas Gera valores de chave primria Melhora o desempenho de algumas consultas Atribui nomes alternativos a objetos

10-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetos do Banco de Dados Um banco de dados Oracle pode conter vrias estruturas de dados. Cada estrutura deve ser descrita no projeto do banco de dados para que possa ser criada durante o estgio de desenvolvimento do banco de dados. Tabela: Armazena dados View: Subconjunto de dados de uma ou mais tabelas Seqncia: Gera valores de chave primria ndice: Melhora o desempenho de algumas consultas Sinnimo: Atribui nomes alternativos a objetos As tabelas podem ser criadas a qualquer momento, at mesmo quando os usurios estiverem usando o banco de dados. No necessrio especificar o tamanho de nenhuma tabela. O tamanho definido pela quantidade de espao alocada no banco de dados como um todo. Entretanto, importante estimar a quantidade de espao que uma tabela usar. A estrutura da tabela pode ser modificada on-line.

Estruturas de Tabela do Oracle8

Observao: H mais objetos de banco de dados disponveis que no so abordados neste curso.

Introduo ao Oracle: SQL e PL/SQL 10-3

Convenes para Nomeao


Deve comear com uma letra Pode ter de 1 a 30 caracteres Deve conter somente AZ, az, 09, _, $ e # No deve duplicar o nome de outro objeto de propriedade do mesmo usurio No deve ser uma palavra reservada pelo Oracle Server

10-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Regras para Nomeao Nomeie tabelas e colunas do banco de dados de acordo com as regras default de nomeao de qualquer objeto do banco de dados Oracle: Nomes de tabela e de colunas devem comear com uma letra e podem ter de 1 a 30 caracteres. Os nomes devem conter somente os caracteres A-Z, az, 09, _ (sublinhado), $ e # (caracteres legais, mas evite us-los). Os nomes no devem duplicar o nome de outro objeto de propriedade do mesmo usurio do Oracle Server. Os nomes no devem ser uma palavra reservada do Oracle Server. Use nomes descritivos para tabelas e outros objetos do banco de dados. Nomeie a mesma entidade de modo consistente em diferentes tabelas. Por exemplo, a coluna do nmero do departamento chamada DEPTNO nas tabelas EMP e DEPT.

Diretrizes para Nomeao

Observao: Os nomes no fazem distino entre maisculas de minsculas. Por exemplo, EMP tratada com o mesmo nome que eMP ou eMp. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "Object Names and Qualifiers".

Introduo ao Oracle: SQL e PL/SQL 10-4

A Instruo CREATE TABLE


Voc deve ter:
privilgio CREATE TABLE Uma rea de armazenamento
CREATE [GLOBAL TEMPORARY] TABLE [esquema.]tabela (tipo de dados da coluna [DEFAULT expr][, ...]);

Especifique:
Nome da tabela Nome da coluna, tipo de dados da

coluna e tamanho da coluna


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

A Instruo CREATE TABLE Crie tabelas para armazenar dados executando a instruo SQL CREATE TABLE. Ela uma das instrues DDL (data definition language) a ser abordada nas prximas lies. As instrues DDL so um subconjunto de instrues SQL usadas para criar, modificar ou remover estruturas do banco de dados Oracle8. Essas instrues possuem um efeito imediato no banco de dados e tambm registram informaes no dicionrio de dados. Para criar uma tabela, o usurio deve ter o privilgio CREATE TABLE e uma rea de armazenamento na qual criar objetos. O administrador do banco de dados usa instrues DCL (data control language), que sero abordadas mais tarde. Na sintaxe: GLOBAL TEMPORARY especifica que a tabela temporria e que sua definio est visvel em todas as sesses. Os dados em uma tabela temporria so visveis somente na sesso que insere dados na tabela. o mesmo do nome do proprietrio o nome da tabela especifica um valor default se um valor estiver omitido na instruo INSERT o nome da coluna o tipo de dados e o comprimento da coluna

esquema tabela DEFAULT expr coluna tipo de dados

Introduo ao Oracle: SQL e PL/SQL 10-5

Fazendo Referncia a Tabelas de Outro Usurio

As tabelas que pertencem a outros usurios no esto no esquema do usurio. Voc deve usar o nome do proprietrio como um prefixo da tabela.

10-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Fazendo Referncia a Tabelas de Outro Usurio Um esquema um conjunto de objetos. Os objetos de esquema so as estruturas lgicas que fazem referncia diretamente aos dados no banco de dados. Os objetos de esquema incluem tabelas, views, sinnimos, seqncias, procedimentos armazenados, ndices, clusters e vnculos com o banco de dados. Se uma tabela no pertencer ao usurio, o nome do proprietrio deve ser prefixado tabela.

Introduo ao Oracle: SQL e PL/SQL 10-6

A Opo DEFAULT
Especifique um valor default para uma coluna durante uma insero.
hiredate DATE DEFAULT SYSDATE,

Valores legais so um valor literal, expresso ou funo SQL. Valores ilegais so outro nome da coluna ou pseudocoluna. O tipo de dados default deve corresponder ao tipo de dados da coluna.
10-7 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Opo DEFAULT Um valor default pode ser dado uma coluna usando-se a opo DEFAULT. Essa opo impede que valores nulos entrem nas colunas se uma linha for inserida sem um valor para a coluna. O valor default pode ser um literal, uma expresso ou uma funo SQL, como SYSDATE e USER, mas o valor no pode ser o nome de outra coluna ou pseudocoluna como NEXTVAL ou CURRVAL. A expresso default deve corresponder ao tipo de dados da coluna.

Introduo ao Oracle: SQL e PL/SQL 10-7

Criando Tabelas
Crie a tabela.
SQL> CREATE TABLE dept 2 (deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13)); Table created.

Confirme a criao da tabela.


SQL> DESCRIBE dept Name Null? --------------------------- -------DEPTNO DNAME LOC
10-8

Type --------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando Tabelas O exemplo no slide cria a tabela DEPT, com trs colunas chamadas, DEPTNO, DNAME e LOC. Ele tambm confirma a criao da tabela emitindo o comando DESCRIBE. Como criar uma tabela uma instruo DDL, um commit automtico ocorre quando essa instruo executada.

Introduo ao Oracle: SQL e PL/SQL 10-8

Tabelas no Banco de Dados Oracle


Tabelas do Usurio
Conjunto de tabelas criadas e mantidas

pelo usurio
Contm informaes sobre o usurio

Dicionrio de dados
Conjunto de tabelas criadas e mantidas

pelo Oracle server


Contm informaes sobre o banco de

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

Tabelas no Banco de Dados Oracle Tabelas do usurio so tabelas criadas pelo usurio, como EMP. H outro conjunto de tabelas e views no banco de dados Oracle conhecido como o dicionrio de dados. Esse conjunto criado e mantido pelo Oracle Server e contm informaes sobre o banco de dados. Todas as tabelas de dicionrio de dados so de propriedade do usurio SYS. As tabelas-base dificilmente so acessadas pelo usurio porque a informao contida nelas no de fcil compreenso. Assim, os usurios geralmente acessam as views do dicionrio de dados porque as informaes so apresentadas em um formato mais fcil de entender. As informaes armazenadas no dicionrio de dados incluem nomes dos usurios do Oracle Server, privilgios concedidos a usurios, nomes de objeto do banco de dados, restries de tabela e informaes sobre auditoria. H quatro categorias de views do dicionrio de dados, cada categoria contm um prefixo distinto que reflete o uso pretendido.
Prefixo USER_ ALL_ DBA_ V$_ Descrio Estas views contm informaes sobre objetos de propriedade do usurio. Estas views contm informaes sobre todas as tabelas (de objeto e relacionais) acessveis ao usurio. Estas views so restritas. Estas views somente podem ser acessadas por pessoas que tenham sido atribudas o DBA total. Estas views contm informaes sobre views de desempenho dinmico, desempenho do servidor do banco de dados e bloqueio.

Introduo ao Oracle: SQL e PL/SQL 10-9

Consultando o Dicionrio de Dados


Descreva tabelas de propriedade do usurio.
SQL> SELECT 2 FROM * user_tables;

Exiba tipos de objetos distintos de propriedade do usurio.


SQL> SELECT 2 FROM DISTINCT object_type user_objects;

Exiba tabelas, views, sinnimos e seqncias de propriedade do usurio.


SQL> SELECT 2 FROM * user_catalog;

10-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Consultando o Dicionrio de Dados Voc pode consultar as tabelas de dicionrio de dados para exibir vrios objetos de banco de dados de sua propriedade. As tabelas de dicionrio de dados freqentemente usadas so: USER_TABLES USER_OBJECTS USER_CATALOG

Observao: USER_CATALOG possui um sinnimo chamado CAT. Voc pode usar esse sinnimo no lugar de USER_CATALOG nas instrues SQL.
SQL> SELECT * 2 FROM CAT;

Introduo ao Oracle: SQL e PL/SQL 10-10

Tipos de Dados
Tipo de Dados VARCHAR2(tamanho) CHAR(tamanho) NUMBER(p,s) DATE LONG CLOB RAW e LONG RAW BLOB BFILE Descrio Dados de caractere de comprimento varivel Dados de caractere de comprimento fixo Dados numricos de comprimento varivel Valores de data e hora Dados de caractere de comprimento varivel at 2 gigabytes Dados de caractere de um byte de at 4 gigabytes Dados binrios brutos Dados binrios de at 4 gigabytes Dados binrios armazenados em um arquivo externo de at 4 gigabytes

10-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de Dados
Tipo de Dados VARCHAR2(tamanho) Descrio Dados de caractere de comprimento varivel (Um tamanho mximo deve ser especificado). O tamanho default e mnimo 1; o tamanho mximo 4000.) Dados de caractere de comprimento fixo de bytes de tamanho de comprimento (O tamanho default e mnimo 1; o tamanho mximo 2000.) Nmero contendo a preciso p e a escala s (A preciso o nmero total de dgitos decimais e a escala o nmero de dgitos direita do ponto decimal. A preciso pode variar de 1 a 38 e a escala, de -84 a 127.) Valores de data e hora entre 1o de janeiro, 4712 A.C. e 31 de dezembro, 9999 D.C. Dados de caractere de comprimento varivel at 2 gigabytes Dados de caractere de um byte de at 4 gigabytes

CHAR(tamanho)

NUMBER(p,s)

DATE LONG CLOB

Introduo ao Oracle: SQL e PL/SQL 10-11

Tipos de Dados
Tipo de Dados VARCHAR2(tamanho) CHAR(tamanho) NUMBER(p,s) DATE LONG CLOB RAW e LONG RAW BLOB BFILE Descrio Dados de caractere de comprimento varivel Dados de caractere de comprimento fixo Dados numricos de comprimento varivel Valores de data e hora Dados de caractere de comprimento varivel at 2 gigabytes Dados de caractere de um byte de at 4 gigabytes Dados binrios brutos Dados binrios de at 4 gigabytes Dados binrios armazenados em um arquivo externo de at 4 gigabytes

10-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Tipos de dados (continuao)


Tipo de Dados RAW(tamanho) LONG RAW BLOB BFILE Descrio Dados binrios brutos de tamanho de comprimento (Um tamanho mximo deve ser especificado. O tamanho mximo 2000.) Dados binrios brutos de comprimento varivel de at 2 gigabytes Dados binrios de at 4 gigabytes Dados binrios armazenados em um arquivo externo; at 4 gigabytes

Introduo ao Oracle: SQL e PL/SQL 10-12

Criando uma Tabela Usando uma Subconsulta


Crie uma tabela e insira linhas combinando a instruo CREATE TABLE e a opo da subconsulta AS.
CREATE TABLE tabela [(coluna, coluna...)] AS subconsulta;

Faa a correspondncia do nmero de colunas especificadas com o nmero de colunas da subconsulta. Defina colunas com nomes de colunas e valores default.
10-13 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma Tabela a Partir de Linhas em Outra Tabela Um segundo mtodo para criar uma tabela aplicar a clusula da subconsulta AS para criar a tabela e inserir linhas retornadas da subconsulta. Na sintaxe: tabela coluna subconsulta Diretrizes A tabela ser criada com os nomes de coluna especificados e as linhas recuperadas pela instruo SELECT sero inseridas na tabela. A definio da coluna pode conter somente o nome da coluna e o valor default. Se forem dadas especificaes para a coluna, o nmero de colunas deve ser igual ao nmero de colunas na lista SELECT da subconsulta. Se no forem dadas especificaes para a coluna, os nomes de coluna da tabela sero os mesmos que os nomes de coluna na subconsulta. o nome da tabela. o nome da coluna, valor default e restrio de integridade. a instruo SELECT que define o conjunto de linhas a serem inseridas sna nova tabela.

Introduo ao Oracle: SQL e PL/SQL 10-13

Criando uma Tabela Usando uma Subconsulta


SQL> CREATE TABLE dept30 2 AS 3 SELECT empno, ename, sal*12 ANNSAL, hiredate 4 FROM emp 5 WHERE deptno = 30; Table created. SQL> DESCRIBE dept30 Name Null? ---------------------------- -------EMPNO NOT NULL ENAME ANNSAL HIREDATE
10-14

Type ----NUMBER(4) VARCHAR2(10) NUMBER DATE

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma Tabela a Partir de Linhas em Outra Tabela (continuao) O exemplo do slide cria uma tabela, DEPT30, que contm detalhes sobre todos os funcionrios que trabalham no departamento 30. Observe que os dados da tabela DEPT30 vm da tabela EMP. Voc pode verificar a existncia de uma tabela do banco de dados e verificar as definies da coluna usando o comando DESCRIBE do SQL*Plus. Fornea um apelido para a coluna ao selecionar uma expresso.

Introduo ao Oracle: SQL e PL/SQL 10-14

A Instruo ALTER TABLE


Use a instruo ALTER TABLE para: Adicionar uma nova coluna Modificar uma coluna existente Definir um valor default para a nova coluna
ALTER TABLE tabela ADD (tipo de dados da coluna [DEFAULT expr] [, tipo de dados da coluna ]...); ALTER TABLE tabela MODIFY (tipo de dados da coluna [DEFAULT expr] [, tipo de dados da coluna ]...);

10-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Instruo ALTER TABLE Aps criar suas tabelas, voc talvez precise alterar as estruturas da tabela porque omitiu uma coluna ou a definio da coluna precisa ser alterada. Voc pode fazer isso usando a instruo ALTER TABLE. Voc pode adicionar colunas a uma tabela usando a instruo ALTER TABLE com a clusula ADD. Na sintaxe: tabela coluna tipo de dados DEFAULT expr o nome da tabela o nome da nova coluna o tipo de dados e o comprimento da nova coluna especifica o valor default para a nova coluna

Voc pode modificar colunas existentes em uma tabela usando a instruo ALTER TABLE com a clusula MODIFY. Observao: O slide fornece a sintaxe abreviada para ALTER TABLE. ALTER TABLE ser abordada com mais detalhes em uma lio mais adiante.

Introduo ao Oracle: SQL e PL/SQL 10-15

Adicionando uma Coluna


DEPT30 EMPNO -----7698 7654 7499 7844 ... ENAME ANNSAL ---------- -------BLAKE 34200 MARTIN 15000 ALLEN 19200 TURNER 18000 Nova coluna HIREDATE 01-MAY-81 28-SEP-81 20-FEB-81 08-SEP-81 JOB

"adicione uma nova coluna na tabela DEPT30"

DEPT30 EMPNO -----7698 7654 7499 7844 ...


10-16

ENAME ANNSAL ---------- -------BLAKE 34200 MARTIN 15000 ALLEN 19200 TURNER 18000

HIREDATE 01-MAY-81 28-SEP-81 20-FEB-81 08-SEP-81

JOB

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando uma Coluna O grfico adiciona a coluna JOB tabela DEPT30. Observe que a nova coluna torna-se a ltima coluna na tabela.

Introduo ao Oracle: SQL e PL/SQL 10-16

Adicionando uma Coluna


Use a clusula ADD para adicionar colunas.
SQL> ALTER TABLE dept30 2 ADD (job VARCHAR2(9)); Table altered.

A coluna nova torna-se a ltima coluna.


EMPNO ENAME ANNSAL HIREDATE JOB --------- ---------- --------- --------- ---7698 BLAKE 34200 01-MAY-81 7654 MARTIN 15000 28-SEP-81 7499 ALLEN 19200 20-FEB-81 7844 TURNER 18000 08-SEP-81 ... 6 rows selected.

10-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes para Adicionar uma Coluna Voc pode adicionar ou modificar colunas, mas no pode remov-las de uma tabela. Voc no pode especificar onde a coluna deve aparecer. A coluna nova torna-se a ltima coluna.

O exemplo no slide adiciona uma coluna chamada JOB tabela DEPT30. A coluna JOB torna-se a ltima coluna na tabela. Observao: Se uma tabela j contiver linhas quando uma coluna for adicionada, ento a nova coluna ser inicialmente nula para todas as linhas.

Introduo ao Oracle: SQL e PL/SQL 10-17

Modificando uma Coluna


Voc pode alterar um tipo de dados, tamanho e valor default de uma coluna.
SQL> ALTER TABLE 2 MODIFY Table altered. dept30 (ename VARCHAR2(15));

Uma alterao no valor default afeta somente as inseres subseqentes tabela.

10-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modificando uma Coluna Voc pode modificar uma definio de coluna usando a instruo ALTER TABLE com a clusula MODIFY. A modificao da coluna pode incluir alteraes ao tipo de dados, tamanho e valor default da coluna. Diretrizes Aumente a largura ou preciso de uma coluna numrica. Diminua a largura de uma coluna se ela contiver somente valores nulos e se a tabela no tiver linhas. Altere o tipo de dados se a coluna contiver valores nulos. Converta uma coluna CHAR para o tipo de dados VARCHAR2 ou converta uma coluna VARCHAR2 para o tipo de dados CHAR se a coluna contiver valores nulos ou se voc no alterar o tamanho. Uma alterao no valor default de uma coluna afeta somente as inseres subseqentes tabela.

Introduo ao Oracle: SQL e PL/SQL 10-18

Eliminando uma Coluna


Use a clusula DROP COLUMN para eliminar colunas que voc no precisa mais na tabela.
SQL> ALTER TABLE 2 DROP COLUMN Table altered. dept30 job ;

10-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Eliminando uma Coluna Voc pode eliminar uma coluna de uma tabela usando a instruo ALTER TABLE com a clusula DROP COLUMN. Esse um recurso disponvel a partir do Oracle8i. Diretrizes A coluna pode ou no conter dados. Somente uma coluna pode ser eliminada por vez. A tabela deve permanecer com pelo menos uma coluna aps ser alterada. Depois que a coluna for eliminada, no poder ser recuperada.

Introduo ao Oracle: SQL e PL/SQL 10-19

Opo SET UNUSED


Use a opo SET UNUSED para marcar uma ou mais colunas como no usadas. Use a opo DROP UNUSED COLUMNS para remover as colunas marcadas como UNUSED.
ALTER TABLE tabela SET UNUSED (coluna);

OR
ALTER TABLE tabela SET UNUSED COLUMN coluna; ALTER TABLE tabela DROP UNUSED COLUMNS;
Copyright Oracle Corporation, 1999. Todos os direitos reservados.

10-20

Opo SET UNUSED A opo SET UNUSED marca uma ou mais colunas como no usadas para que possam ser eliminadas quando a demanda nos recursos do sistema for menor. Esse recurso est disponvel no Oracle8i. Ao especificar esta clusula voc, na verdade, no remove as colunas de destino de cada linha na tabela (ou seja, no restaura o espao em disco usado por essas colunas). Por isso, o tempo de resposta mais rpido do que seria se voc executasse a clusula DROP. As colunas no usadas so tratadas como se fossem eliminadas, embora os dados da coluna permaneam nas linhas da tabela. Aps uma coluna ter sido marcada como no usada, voc no ter acesso a essa coluna . Uma consulta "SELECT *" no recuperar os dados de colunas no usadas. Alm disso, os nomes e tipos de colunas marcadas como no usadas no sero exibidos durante DESCRIBE e voc poder adicionar tabela uma nova coluna com o mesmo nome que uma coluna no usada.

Introduo ao Oracle: SQL e PL/SQL 10-20

Opo DROP UNUSED COLUMNS DROP UNUSED COLUMNS remove da tabela todas as colunas marcadas atualmente como no usadas. Voc pode usar essa instruo quando quiser recuperar o espao em disco extra de colunas no usadas na tabela. Se a tabela no contiver colunas no usadas, a instruo retornar sem erros.
SQL> ALTER TABLE 2 SET Table altered. SQL> ALTER TABLE 2 DROP Table altered. dept30 dept30 UNUSED (ename);

UNUSED COLUMNS;

Introduo ao Oracle: SQL e PL/SQL 10-21

Eliminando uma Tabela


Todos os dados e estrutura da tabela sero excludos. Todas as transaes pendentes sofrero commit. Todos os ndices sero eliminados. Voc no pode fazer roll back desta instruo.
SQL> DROP TABLE dept30; Table dropped.

10-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Eliminando uma Tabela A instruo DROP TABLE remove a definio de uma tabela do Oracle8. Quando voc elimina uma tabela, o banco de dados perde todos os dados na tabela e todos os ndices associados a ela. Sintaxe
DROP TABLE tabela;

onde: Diretrizes

tabela

o nome da tabela

Todos os dados so deletados da tabela. As views e sinnimos permanecero, mas sero invlidos. Todas as transaes pendentes sofrero commit. Somente o criador da tabela ou um usurio com o privilgio DROP ANY TABLE poder remover uma tabela.

A instruo DROP TABLE, uma vez executada, irreversvel. O Oracle Server no questiona a ao quando voc emite a instruo DROP TABLE. Se voc possuir tal tabela ou tiver um privilgio de nvel superior, ento a tabela ser imediatamente removida. Todas as instrues DDL emitem um commit, tornando assim a transao permanente.

Introduo ao Oracle: SQL e PL/SQL 10-22

Alterando o Nome de um Objeto


Para alterar o nome de uma tabela, view, seqncia ou sinnimo, execute a instruo RENAME.
SQL> RENAME dept TO department; Table renamed.

Voc deve ser o proprietrio do objeto.

10-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Renomeando uma Tabela As instrues DDL adicionais incluem a instruo RENAME, que usada para renomear uma tabela, view, seqncia ou sinnimo. Sintaxe
RENAME

old_name

TO

new_name;

onde:

old_name new_name

o nome antigo da tabela, da view, da seqncia ou do sinnimo o novo nome da tabela, da view, da seqncia ou do sinnimo

Voc deve ser o proprietrio do objeto que renomear.

Introduo ao Oracle: SQL e PL/SQL 10-23

Truncando uma Tabela


A Instruo TRUNCATE TABLE:
Remove todas as linhas de uma tabela Libera o espao de armazenamento

usado por esta tabela


SQL> TRUNCATE TABLE department; Table truncated.

Voc no pode fazer roll back da remoo da linha ao usar TRUNCATE. Como alternativa, voc pode remover as linhas usando a instruo DELETE.
10-24 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Truncando uma Tabela Outra instruo DDL a instruo TRUNCATE TABLE, que usada para remover todas as linhas de uma tabela e para liberar o espao de armazenamento usado por essa tabela. Ao usar a instruo TRUNCATE TABLE, voc no pode fazer roll back da remoo de linha. Sintaxe
TRUNCATE TABLE

tabela;

onde:

tabela

o nome da tabela

Voc deve ser o proprietrio da tabela ou ter privilgios de sistema DELETE TABLE para truncar a tabela. A instruo DELETE tambm pode remover todas as linhas de uma tabela, mas no libera o espao de armazenamento.

Introduo ao Oracle: SQL e PL/SQL 10-24

Adicionando Comentrios a uma Tabela


Voc pode adicionar comentrios a uma tabela ou coluna usando a instruo COMMENT.
SQL> COMMENT ON TABLE emp 2 IS 'Employee Information'; Comment created.

Os comentrios podem ser exibidos atravs das views do dicionrio de datas. ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS
10-25 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando um Comentrio a uma Tabela Voc pode adicionar um comentrio de at 2.000 bytes sobre uma coluna, tabela, view ou instantneo usando a instruo COMMENT. O comentrio armazenado no dicionrio de dados e pode ser visto em uma das seguintes views do dicionrio de datas na coluna COMMENTS: ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS

Sintaxe
COMMENT ON TABLE tabela | COLUMN tabela.coluna IS 'text';

onde:

tabela coluna texto

o nome da tabela o nome da coluna em uma tabela o texto do comentrio

Voc pode eliminar um comentrio do banco de dados definindo-o como uma string vazia ('').
SQL> COMMENT ON TABLE emp IS ' ';

Introduo ao Oracle: SQL e PL/SQL 10-25

Sumrio
Instruo CREATE TABLE ALTER TABLE DROP TABLE RENAME TRUNCATE COMMENT Descrio Cria uma tabela Modifica as estruturas da tabela Remove as linhas e estrutura da tabela Altera o nome de uma tabela, view, seqncia ou sinnimo Remove todas as linhas de uma tabela e libera o espao de armazenamento Adiciona comentrios a uma tabela ou view

10-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

CREATE TABLE Cria uma tabela. Cria uma tabela baseada em outra tabela usando uma subconsulta. Modifica as estruturas da tabela. Altera larguras da coluna, tipos de dados da coluna e adiciona colunas. Remove linhas e estrutura de uma tabela. Uma vez executada, no possvel fazer roll back dessa instruo. Renomeia uma tabela, view, seqncia ou sinnimo. Remove todas as linhas de uma tabela e libera o espao de armazenamento usado pela tabela. A instruo DELETE remove somente linhas. Adiciona um comentrio a uma tabela ou coluna. Consulta o dicionrio de dados para ver o comentrio.
Introduo ao Oracle: SQL e PL/SQL 10-26

ALTER TABLE

DROP TABLE

RENAME TRUNCATE

COMMENT

Viso Geral do Exerccio


Criando novas tabelas Criando uma nova tabela usando a sintaxe CREATE TABLE AS Modificando definies da coluna Verificando que as tabelas existem Adicionando comentrios s tabelas Eliminando tabelas Alterando tabelas

10-27

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Crie novas tabelas usando a instruo CREATE TABLE. Confirme se a nova tabela foi adicionada ao banco de dados. Crie a sintaxe no arquivo de comandos e execute-o para criar a tabela.

Introduo ao Oracle: SQL e PL/SQL 10-27

Exerccio 10 1. Crie a tabela DEPARTMENT de acordo com tabela de exemplo a seguir. Informe a sintaxe em um script chamado p10q1.sql e execute o script para criar a tabela. Confirme se a tabela foi criada.
Column Name Key Type Nulls/Unique FK Table FK Column Datatype Length Number 7 Varchar2 25 Id Name

Name Null? Type ---------- -------- ----------ID NAME NUMBER(7) VARCHAR2(25)

2. Preencha a tabela DEPARTMENT com os dados a partir da tabela DEPT. Inclua somente colunas que voc precisar. 3. Create Crie a tabela EMPLOYEE de acordo com a tabela de exemplo a seguir. Informe a sintaxe em um script chamado p10q3.sql e execute o script para criar a tabela. Confirme se a tabela foi criada.
Column Name Key Type Nulls/Unique FK Table FK Column Datatype Length Number 7 Varchar2 25 Varchar2 25 Number 7 ID LAST_NAME FIRST_NAME DEPT_ID

Name ID LAST_NAME FIRST_NAME DEPT_ID

Null?

Type NUMBER(7) VARCHAR2(25) VARCHAR2(25) NUMBER(7)

------------- -------- ------------

Introduo ao Oracle: SQL e PL/SQL 10-28

Exerccio 10 (continuao) 4. Modifique a tabela EMPLOYEE para aceitar os sobrenomes longos dos funcionrios. Confirme suas modificaes.
Name ID LAST_NAME FIRST_NAME DEPT_ID Null? Type NUMBER(7) VARCHAR2(50) VARCHAR2(25) NUMBER(7)

------------- -------- -----------

5. Confirme se as tabelas DEPARTMENT e EMPLOYEE foram armazenadas no dicionrio de dados. (Dica: USER_TABLES)
TABLE_NAME ------------------------DEPARTMENT EMPLOYEE

6. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas como ID, LAST_NAME e DEPT_ID na nova tabela, respectivamente. 7. Elimine a tabela EMPLOYEE. 8. Renomeie a tabela EMPLOYEE2 para EMPLOYEE. 9. Adicione um comentrio s definies das tabelas DEPARTMENT e EMPLOYEE, descrevendo as tabelas. Confirme as adies ao dicionrio de dados. 10. Elimine a coluna LAST_NAME da tabela EMPLOYEE. Confirme a modificao verificando a descrio da tabela. 11. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas como ID, LAST_NAME e DEPT_ID na nova tabela, respectivamente. Marque a coluna DEPT_ID na tabela EMPLOYEE2 como UNUSED. Confirme a modificao, verificando a descrio da tabela. 12. Elimine todas as colunas UNUSED a partir da tabela EMPLOYEE2. Confirme a modificao, verificando a descrio da tabela.

Introduo ao Oracle: SQL e PL/SQL 10-29

Introduo ao Oracle: SQL e PL/SQL 10-30

11
Incluindo Restries

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos

Depois de completar esta lio, voc poder fazer o seguinte: Descrever restries Criar e manter restries

11-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender como implementar regras comerciais incluindo restries de integridade.

Introduo ao Oracle: SQL e PL/SQL 11-2

O Que So Restries?
As restries impem regras no nvel da tabela. As restries evitam que uma tabela seja deletada se houver dependncias. Os seguintes tipos de restrio so vlidos no Oracle: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK
11-3 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Restries O Oracle Server usa restries para impedir que dados invlidos sejam digitados nas tabelas. Use restries para fazer o seguinte: Impor regras no nvel da tabela sempre que uma linha for inserida, atualizada ou deletada da tabela. A restrio deve ser satisfeita para a operao ser bem-sucedida. Impedir que uma tabela seja deletada se houver dependncias de outras tabelas. Fornecer regras para ferramentas do Oracle, como o Oracle Developer.
Descrio Especifica que esta coluna no pode conter um valor nulo Especifica uma coluna ou combinao de colunas cujos valores devem ser exclusivos para todas as linhas na tabela Identifica exclusivamente cada linha da tabela Estabelece e impe um relacionamento de chave estrangeira entre a coluna e a coluna da tabela referenciada Especifica uma condio que deve ser verdadeira

Restries de Integridade de Dados


Restrio NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CONSTRAINT Clause".
Introduo ao Oracle: SQL e PL/SQL 11-3

Diretrizes sobre Restries


Nomeie uma restrio ou o Oracle Server gerar um nome usando o formato SYS_Cn. Crie uma restrio:
No momento em que a tabela for criada Depois que a tabela tiver sido criada

Defina uma restrio no nvel da coluna ou da tabela. Exiba uma restrio no dicionrio de dados.

11-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes sobre Restries Todas as restries so armazenadas no dicionrio de dados. Ser mais fcil fazer referncia s restries se voc der a elas um nome significativo. Os nomes de restries devem seguir as regras padro para nomeao de objeto. Se voc no nomear a restrio, o Oracle gerar um nome com o formato SYS_Cn, onde n um nmero inteiro para criar um nome de restrio exclusivo. As restries podem ser definidas quando a tabela for criada ou depois de ter sido criada. Voc pode ver as restries definidas para uma tabela especfica olhando na tabela do dicionrio de dados USER_CONSTRAINTS.

Introduo ao Oracle: SQL e PL/SQL 11-4

Definindo Restries
CREATE TABLE [esquema.]tabela (tipo de dados da coluna [DEFAULT expr] [column_constraint], ... [table_constraint][,...]);

CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), ... deptno NUMBER(2) NOT NULL, CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO));

11-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Definindo Restries O slide fornece a sintaxe para definir restries ao criar uma tabela. Na sintaxe: esquema tabela DEFAULT expr coluna tipo de dados column_constraint table_constraint igual ao nome do proprietrio o nome da tabela especifica um valor default se um valor estiver omitido na instruo INSERT o nome da coluna o tipo de dados e o comprimento da coluna uma restrio de integridade como parte da definio da coluna uma restrio de integridade como parte da definio da tabela

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE TABLE".

Introduo ao Oracle: SQL e PL/SQL 11-5

Definindo Restries
Nvel de restrio da coluna
coluna [CONSTRAINT constraint_name] constraint_type,

Nvel de restrio da tabela


coluna,... [CONSTRAINT constraint_name] constraint_type (coluna, ...),

11-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Definindo Restries (continuao) As restries geralmente so criadas ao mesmo tempo em que criada a tabela. As restries podem ser adicionadas a uma tabela depois de sua criao e podem ser desativadas temporariamente. As restries podem ser definidas em um ou dois nveis.
Nvel da Restrio Column Table Descrio Faz referncia a uma nica coluna e definida dentro de uma especificao para a coluna qual pertence Faz referncia a uma ou mais colunas e definida separadamente das definies da coluna na tabela; pode definir quaisquer restries exceto NOT NULL

Na sintaxe: constraint_name constraint_type o nome da restrio o tipo da restrio

Introduo ao Oracle: SQL e PL/SQL 11-6

A Restrio NOT NULL


Assegura que os valores nulos no sejam permitidos para a coluna
EMP

EMPNO ENAME 7839 7698 7782 7566 ... KING BLAKE CLARK JONES

JOB PRESIDENT MANAGER MANAGER MANAGER

...

COMM

DEPTNO 10 30 10 20

Restrio NOT NULL (nenhuma linha pode conter um valor nulo para esta coluna)

Ausncia da restrio Restrio NOT NULL NOT NULL (qualquer linha pode conter um valor nulo para esta coluna)

11-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio NOT NULL A restrio NOT NULL assegura que os valores nulos no sejam permitidos na coluna. As colunas sem uma restrio NOT NULL podem conter valores nulos por default.

Introduo ao Oracle: SQL e PL/SQL 11-7

A Restrio NOT NULL


Definida no nvel da coluna
SQL> CREATE TABLE 2 empno 3 ename 4 job 5 mgr 6 hiredate 7 sal 8 comm 9 deptno emp( NUMBER(4), VARCHAR2(10) NOT NULL, VARCHAR2(9), NUMBER(4), DATE, NUMBER(7,2), NUMBER(7,2), NUMBER(7,2) NOT NULL);

11-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio NOT NULL (continuao) A restrio NOT NULL pode ser especificada somente no nvel da coluna, no no da tabela. O exemplo do slide aplica a restrio NOT NULL s colunas ENAME e DEPTNO da tabela EMP. Como essas restries no possuem nome, o Oracle Server criar nomes para elas. Voc pode especificar o nome da restrio ao especific-la.
... deptno NUMBER(7,2) CONSTRAINT emp_deptno_nn NOT NULL...

Observao: Todos os exemplos de restrio descritos nesta lio podem no estar presentes nas tabelas de exemplo fornecidas com o curso. Se desejar, essas restries podem ser adicionadas s tabelas.

Introduo ao Oracle: SQL e PL/SQL 11-8

A Restrio UNIQUE KEY


Restrio UNIQUE KEY DEPT

DEPTNO -----10 20 30 40

DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS

LOC -------NEW YORK DALLAS CHICAGO BOSTON

Inserir em

50 SALES 60

DETROIT BOSTON

No permitido (DNAME-SALES j existe) Permitido

11-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio UNIQUE KEY Uma restrio de integridade UNIQUE KEY requer que cada valor em uma coluna ou conjunto de colunas (chave) seja exclusivo ou seja, duas linhas de uma tabela no podem ter valores duplicados em uma coluna especfica ou conjunto de colunas. A coluna (ou conjunto de colunas) includa na definio da restrio UNIQUE KEY chamada de chave exclusiva. Se a chave UNIQUE contiver mais de uma coluna, tal grupo de colunas considerado uma chave exclusiva composta. As restries UNIQUE KEY permitem a entrada de valores nulos a menos que voc defina as restries NOT NULL para as mesmas colunas. Na realidade, qualquer nmero de linhas pode incluir valores nulos para colunas sem restries NOT NULL porque os valores nulos no so considerados. Um valor nulo em uma coluna (ou em todas as colunas de uma chave UNIQUE composta) sempre satisfaz uma restrio de UNIQUE KEY. Observao: Por causa do mecanismo de pesquisa por restries UNIQUE em mais de uma coluna, voc no pode ter valores idnticos nas colunas no-nulas de uma restrio de UNIQUE KEY composta parcialmente nula.

Introduo ao Oracle: SQL e PL/SQL 11-9

A Restrio UNIQUE KEY


Definida no nvel da tabela ou da coluna
SQL> CREATE TABLE 2 deptno 3 dname 4 loc 5 CONSTRAINT dept( NUMBER(2), VARCHAR2(14), VARCHAR2(13), dept_dname_uk UNIQUE(dname));

11-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio UNIQUE KEY (continuao) Restries UNIQUE KEY podem ser definidas no nvel da coluna ou da tabela. Uma chave exclusiva composta criada usando-se a definio no nvel da tabela. O exemplo no slide aplica a restrio UNIQUE KEY coluna DNAME da tabela DEPT. O nome da restrio DEPT_DNAME_UK. Observao: O Oracle Server impe a restrio UNIQUE KEY implicitamente criando um ndice exclusivo na chave exclusiva.

Introduo ao Oracle: SQL e PL/SQL 11-10

A Restrio PRIMARY KEY


PRIMARY KEY DEPT

DEPTNO -----10 20 30 40

DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS

LOC -------NEW YORK DALLAS CHICAGO BOSTON

Inserir em

20 MARKETING FINANCE

DALLAS NEW YORK

No permitido (DEPTNO 20 j existe) No permitido (DEPTNO nulo)

11-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio PRIMARY KEY Uma restrio PRIMARY KEY cria uma chave primria para a tabela. Somente uma chave primria pode ser criada para cada tabela. A restrio PRIMARY KEY uma coluna ou conjunto de colunas que identifica exclusivamente cada linha em uma tabela. Essa restrio impe a exclusividade da coluna ou combinao de colunas e assegura que nenhuma coluna que seja parte da chave primria possa conter um valor nulo.

Introduo ao Oracle: SQL e PL/SQL 11-11

A Restrio PRIMARY KEY


Definida no nvel da tabela ou da coluna
SQL> CREATE TABLE 2 deptno 3 dname 4 loc 5 CONSTRAINT 6 CONSTRAINT dept( NUMBER(2), VARCHAR2(14), VARCHAR2(13), dept_dname_uk UNIQUE (dname), dept_deptno_pk PRIMARY KEY(deptno));

11-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio PRIMARY KEY (continuao) As restries PRIMARY KEY podem ser definidas no nvel da coluna ou da tabela. Uma PRIMARY KEY composta criada usando-se a definio no nvel da tabela. O exemplo no slide define uma restrio PRIMARY KEY na coluna DEPTNO da tabela DEPT. O nome da restrio DEPT_DEPTNO_PK. Observao: Um ndice UNIQUE automaticamente criado para uma coluna PRIMARY KEY.

Introduo ao Oracle: SQL e PL/SQL 11-12

A Restrio FOREIGN KEY


DEPT PRIMARY KEY

DEPTNO -----10 20 ...

DNAME ---------ACCOUNTING RESEARCH

LOC -------NEW YORK DALLAS

EMP

EMPNO ENAME 7839 KING 7698 BLAKE ...

JOB PRESIDENT MANAGER

...

COMM

DEPTNO 10 30

FOREIGN KEY

Inserir em

7571 FORD 7571 FORD


11-13

MANAGER MANAGER

... ...

200 200

9 20

No permitido (DEPTNO 9 no existe na tabela DEPT) Permitido

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio FOREIGN KEY FOREIGN KEY, ou uma restrio de integridade referencial, designa uma coluna ou combinao de colunas como a chave estrangeira e estabelece um relacionamento entre a chave primria ou uma chave exclusiva na mesma tabela ou uma tabela diferente. No exemplo do slide, DEPTNO foi definida como a chave estrangeira na tabela EMP (tabela filha ou dependente); ela faz referncia coluna DEPTNO da tabela DEPT (tabela me ou referenciada). Um valor de chave estrangeira deve corresponder a um valor existente na tabela me ou ser NULL. As chaves estrangeiras so baseadas nos valores dos dados, sendo puramente lgicas, e no ponteiros fsicos.

Introduo ao Oracle: SQL e PL/SQL 11-13

A Restrio FOREIGN KEY


Definida no nvel da tabela ou da coluna
SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3 ename VARCHAR2(10) NOT NULL, 4 job VARCHAR2(9), 5 mgr NUMBER(4), 6 hiredate DATE, 7 sal NUMBER(7,2), 8 comm NUMBER(7,2), 9 deptno NUMBER(7,2) NOT NULL, 10 CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) 11 REFERENCES dept (deptno));

11-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio FOREIGN KEY (continuao) As restries FOREIGN KEY podem ser definidas no nvel da restrio da tabela ou coluna. Uma chave estrangeira composta deve ser criada usando-se a definio no nvel da tabela. O exemplo no slide define uma restrio FOREIGN KEY na coluna DEPTNO da tabela EMP, usando uma sintaxe no nvel da tabela. O nome da restrio EMP_DEPTNO_FK. A chave estrangeira tambm pode ser definida no nvel da coluna, desde que a restrio seja baseada em uma nica coluna. A sintaxe diferente pois as palavras-chave FOREIGN KEY no aparecem. Por exemplo:
SQL> CREATE TABLE emp (. deptno NUMBER(2) CONSTRAINT emp_deptno_fk REFERENCES dept(deptno), . );

Introduo ao Oracle: SQL e PL/SQL 11-14

Palavras-chave da Restrio FOREIGN KEY


FOREIGN KEY: Define a coluna na tabela filha no nvel de restrio da tabela REFERENCES: Identifica a tabela e a coluna na tabela me ON DELETE CASCADE: Permite excluso na tabela me e das linhas dependentes na tabela filha

11-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio FOREIGN KEY (continuao) A chave estrangeira definida na tabela filha e a tabela contendo a coluna referenciada a tabela me. A chave estrangeira definida usando-se uma combinao das seguintes palavras-chave: FOREIGN KEY usada para definir a coluna na tabela filha no nvel de restrio da tabela. REFERENCES identifica a tabela e a coluna na tabela me. ON DELETE CASCADE indica que quando a linha na tabela me deletada, as linhas dependentes na tabela filha tambm sero deletadas.

Sem a opo ON DELETE CASCADE, a linha na tabela me no pode ser deletada se for feita referncia a ela na tabela filha.

Introduo ao Oracle: SQL e PL/SQL 11-15

A Restrio CHECK
Define uma condio que cada linha deve satisfazer Expresses que no so permitidas: Referncias s pseudocolunas CURRVAL, NEXTVAL, LEVEL, e ROWNUM Chamadas para as funes SYSDATE, UID, USER e USERENV Consultas que se referem a outros valores em outras linhas
..., deptno NUMBER(2), CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99),...
11-16 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

A Restrio CHECK A restrio CHECK define uma condio que cada linha deve satisfazer. A condio pode usar as mesmas construes que as condies de consulta, com as seguintes excees: Referncias s pseudocolunas CURRVAL, NEXTVAL, LEVEL e ROWNUM Chamadas para as funes SYSDATE, UID, USER e USERENV Consultas que se referem a outros valores em outras linhas

Uma nica coluna pode ter vrias restries CHECK que fazem referncia coluna na sua definio. No h limite no nmero de restries CHECK que voc pode definir em uma coluna. As restries CHECK podem ser definidas no nvel da coluna ou da tabela.

Introduo ao Oracle: SQL e PL/SQL 11-16

Adicionando uma Restrio


ALTER TABLE tabela ADD [CONSTRAINT restrio] tipo (coluna);

Adicione ou elimine, mas no modifique uma restrio Ative ou desative restries Adicione uma restrio NOT NULL usando a clusula MODIFY

11-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando uma Restrio Voc pode adicionar uma restrio para tabelas existentes usando uma instruo ALTER TABLE com a clusula ADD. Na sintaxe: tabela restrio tipo coluna o nome da tabela o nome da restrio o tipo da restrio o nome da coluna afetada pela restrio

A sintaxe do nome da restrio opcional, embora recomendada. Se voc no nomear suas restries, o sistema criar nomes de restrio. Diretrizes Voc pode adicionar, eliminar, ativar ou desativar uma restrio, mas no pode modificar sua estrutura. Voc pode adicionar uma restrio NOT NULL a uma coluna existente usando a clusula MODIFY da instruo ALTER TABLE.

Observao: Voc pode definir uma coluna NOT NULL somente se a tabela no contiver linhas, porque os dados no podem ser especificados para linhas existentes ao mesmo tempo em que a coluna adicionada.

Introduo ao Oracle: SQL e PL/SQL 11-17

Adicionando uma Restrio


Adicione uma restrio FOREIGN KEY tabela EMP indicando que um gerente j deve existir como um funcionrio vlido na tabela EMP.
SQL> ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr) REFERENCES emp(empno); Table altered.

11-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Adicionando uma Restrio (continuao) O exemplo no slide cria uma restrio FOREIGN KEY na tabela EMP. A restrio assegura que um gerente existe como um funcionrio vlido na tabela EMP.

Introduo ao Oracle: SQL e PL/SQL 11-18

Eliminando uma Restrio


Remova a restrio do gerente da tabela EMP.
SQL> ALTER TABLE 2 DROP CONSTRAINT Table altered. emp emp_mgr_fk;

Remova a restrio PRIMARY KEY na tabela DEPT e elimine a restrio FOREIGN KEY associada na coluna EMP.DEPTNO.
SQL> ALTER TABLE dept 2 DROP PRIMARY KEY CASCADE; Table altered.

11-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Eliminando uma Restrio Para eliminar uma restrio, voc pode identificar o nome da restrio a partir das views do dicionrio de dados USER_CONSTRAINTS e USER_CONS_COLUMNS. Em seguida, use a instruo ALTER TABLE com a clusula DROP. A opo CASCADE da clusula DROP faz com que quaisquer restries dependentes sejam eliminadas. Sintaxe
ALTER TABLE tabela DROP PRIMARY KEY | UNIQUE (coluna) | CONSTRAINT restrio [CASCADE];

onde:

tabela coluna restrio

o nome da tabela o nome da coluna afetada pela restrio o nome da restrio

Quando voc elimina uma restrio de integridade, essa restrio no mais imposta pelo Oracle Server e no fica mais disponvel no dicionrio de dados.

Introduo ao Oracle: SQL e PL/SQL 11-19

Desativando Restries
Execute a clusula DISABLE da instruo ALTER TABLE para desativar uma restrio de integridade. Aplique a opo CASCADE para desativar restries de integridade dependentes.
SQL> ALTER TABLE 2 DISABLE CONSTRAINT Table altered. emp emp_empno_pk CASCADE;

11-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Desativando uma Restrio Voc pode desativar uma restrio sem elimin-la ou recri-la usando a instruo ALTER TABLE com a clusula DISABLE. Sintaxe
ALTER TABLE tabela DISABLE CONSTRAINT restrio [CASCADE];

onde: Diretrizes

tabela restrio

o nome da tabela o nome da restrio

Voc pode usar a clusula DISABLE nas instrues CREATE TABLE e ALTER TABLE. A clusula CASCADE desativa restries de integridade dependentes.

Introduo ao Oracle: SQL e PL/SQL 11-20

Ativando Restries
Ative uma restrio de integridade atualmente desativada na definio da tabela usando a clusula ENABLE.
SQL> ALTER TABLE 2 ENABLE CONSTRAINT Table altered. emp emp_empno_pk;

Um ndice UNIQUE ou PRIMARY KEY automaticamente criado se voc ativar uma restrio UNIQUE KEY ou PRIMARY KEY.

11-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Ativando uma Restrio Voc pode ativar uma restrio sem elimin-la ou recri-la usando a instruo ALTER TABLE com a clusula ENABLE. Sintaxe
ALTER ENABLE TABLE tabela CONSTRAINT restrio;

onde: Diretrizes

tabela restrio

o nome da tabela o nome da restrio

Se voc ativar uma restrio, essa restrio ser aplicada a todos os dados na tabela. Todos os dados na tabela devem ajustar-se restrio. Se voc ativar uma restrio UNIQUE KEY ou PRIMARY KEY, um ndice UNIQUE ou PRIMARY KEY automaticamente criado. Voc pode usar a clusula ENABLE nas instrues CREATE TABLE e ALTER TABLE.

Introduo ao Oracle: SQL e PL/SQL 11-21

Restries em Cascata
A clusula CASCADE CONSTRAINTS usada junto com a clusula DROP COLUMN. A clusula CASCADE CONSTRAINTS elimina todas as restries de integridade referenciais que se referem s chaves exclusiva e primria definidas nas colunas eliminadas.

11-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

CONSTRAINTS em cascata Esta instruo ilustra o uso da clusula CASCADE CONSTRAINTS. Suponha que a tabela test1 seja criada da seguinte forma:
SQL> CREATE TABLE test1 ( 2 3 4 5 6 7 8 pk NUMBER PRIMARY KEY, fk NUMBER, col1 NUMBER, col2 NUMBER, CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES test1, CONSTRAINT ck1 CHECK (pk > 0 and col1 > 0), CONSTRAINT ck2 CHECK (col2 > 0));

Um erro ser retornado para as seguintes instrues:


SQL> ALTER TABLE test1 DROP (pk); -- pk uma chave me SQL> ALTER TABLE test1 DROP (col1); -- c1 referenciada pela restrio de vrias colunas ck1

Introduo ao Oracle: SQL e PL/SQL 11-22

Restries em Cascata

A clusula CASCADE CONSTRAINTS tambm elimina todas as restries de vrias colunas definidas nas colunas eliminadas.

11-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

CONSTRAINTS em cascata (continuao) Quando as seguintes instrues so submetidas, a coluna ok, a restrio de chave primria, a restrio de chave estrangeira, a restrio fk e a restrio de verificao ck1 so eliminadas:
SQL> ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS;

Se todas as colunas referenciadas pelas restries definidas nas colunas eliminadas tambm forem eliminadas, ento CASCADE CONSTRAINTS no requerida. Por exemplo, pressupondo que nenhuma outra restrio referencial de outras tabelas refere-se coluna PK, ento vlido submeter a seguinte instruo sem a clusula CASCADE CONSTRAINTS:
SQL> ALTER TABLE test1 DROP (pk, fk, col1);

Introduo ao Oracle: SQL e PL/SQL 11-23

Verificando Restries
Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definies de restrio.
SQL> 2 3 4 SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = 'EMP'; C C C P SEARCH_CONDITION ------------------------EMPNO IS NOT NULL DEPTNO IS NOT NULL

CONSTRAINT_NAME -----------------------SYS_C00674 SYS_C00675 EMP_EMPNO_PK ...

11-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Verificando Restries Aps criar uma tabela, voc pode confirmar sua existncia emitindo um comando DESCRIBE. A nica restrio que voc pode verificar a restrio NOT NULL. Para ver todas as restries em sua tabela, consulte a tabela USER_CONSTRAINTS. O exemplo no slide exibe todas as restries da tabela EMP. Observao: As restries que no forem nomeadas pelo proprietrio da tabela recebem o nome de restrio atribudo pelo sistema. No tipo de restrio, C significa CHECK, P significa PRIMARY KEY, R significa integridade referencial e U significa chave UNIQUE. Observe que a restrio NOT NULL , na verdade, uma restrio CHECK.

Introduo ao Oracle: SQL e PL/SQL 11-24

Verificando Colunas Associadas com Restries


Visualize as colunas associadas aos nomes de restrio na view USER_CONS_COLUMNS.
SQL> SELECT 2 FROM 3 WHERE constraint_name, column_name user_cons_columns table_name = 'EMP'; COLUMN_NAME ---------------------DEPTNO EMPNO MGR EMPNO DEPTNO

CONSTRAINT_NAME ------------------------EMP_DEPTNO_FK EMP_EMPNO_PK EMP_MGR_FK SYS_C00674 SYS_C00675

11-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Verificando Restries (continuao) Voc pode ver os nomes das colunas envolvidas em restries consultando a view do dicionrio de dados USER_CONS_COLUMNS. Essa view especialmente til para restries que usam o nome atribudo pelo sistema.

Introduo ao Oracle: SQL e PL/SQL 11-25

Sumrio
Crie os seguintes tipos de restries:
NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK

Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definies de restrio.

11-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Sumrio O Oracle Server usa restries para impedir que dados invlidos sejam digitados nas tabelas. Os seguintes tipos de restries so vlidos: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK

Voc pode consultar a tabela USER_CONSTRAINTS para ver todos os nomes e definies de restrio.

Introduo ao Oracle: SQL e PL/SQL 11-26

Viso Geral do Exerccio

Adicionando restries s tabelas existentes Adicionando mais colunas a uma tabela Exibindo informaes nas views do dicionrio de dados

11-27

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc adicionar restries e mais colunas a uma tabela usando as instrues abordadas nesta lio. Observao: recomendvel que voc nomeie as restries que for definir durante os exerccios.

Introduo ao Oracle: SQL e PL/SQL 11-27

Exerccio 11 1. Adicione uma restrio no nvel de tabela PRIMARY KEY tabela EMPLOYEE, usando a coluna ID. A restrio deve ser nomeada quando for criada. Dica: A restrio ativada assim que o comando ALTER TABLE executado corretamente. 2. Crie uma restrio PRIMARY KEY na tabela DEPARTMENT usando a coluna ID. A restrio deve ser nomeada quando for criada. Dica: A restrio ativada assim que o comando ALTER TABLE executado corretamente. 3. Adicione uma referncia de chave estrangeira na tabela EMPLOYEE que ir assegurar que o funcionrio no seja atribudo a um departamento no existente. 4. Confirme se as restries foram adicionadas, consultando USER_CONSTRAINTS. Observe os tipos e nomes das restries. Salve o texto da instruo em um arquivo chamado p11q4.sql.
CONSTRAINT_NAME C ----------------------- -DEPARTMENT_ID_PK P EMPLOYEE_ID_PK P EMPLOYEE_DEPT_ID_FK R

5. Exiba os tipos e nomes de objeto a partir da view de dicionrio de dados USER_OBJECTS para as tabelas EMPLOYEE e DEPARTMENT. Voc pode desejar formatar as colunas para torn-las mais legveis. Observe se as novas tabelas e o novo ndice foram criados.
OBJECT_NAME ---------------DEPARTMENT DEPARTMENT_ID_PK EMPLOYEE EMPLOYEE_ID_PK OBJECT_TYPE ----------TABLE INDEX TABLE INDEX

Se voc tiver tempo, complete o exerccio abaixo: 6. Modifique a tabela EMPLOYEE. Adicione a coluna SALARY do tipo de dados NUMBER, preciso 7.

Introduo ao Oracle: SQL e PL/SQL 11-28

12
Criando Views

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever uma view Criar uma view Recuperar dados atravs de uma view Alterar a definio de uma view Inserir, atualizar e deletar dados atravs de uma view Eliminar uma view
12-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender a criar e usar views. Voc tambm aprender a consultar o objeto relevante do dicionrio de dados para recuperar informaes sobre views.

Introduo ao Oracle: SQL e PL/SQL 12-2

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever uma view em linha Executar a Anlise "Top-N"

12-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc tambm aprender a criar e usar views em linha e executar a anlise Top-N usando views em linha.

Introduo ao Oracle: SQL e PL/SQL 12-3

Objetos de Banco de Dados


Objeto Tabela Descrio Unidade bsica de armazenamento; composto de linhas e colunas Representa logicamente subconjuntos de dados de uma ou mais tabelas Gera valores de chave primria Melhora o desempenho de algumas consultas Nome alternativo para um objeto

View

Seqncia ndice Sinnimo

12-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Introduo ao Oracle: SQL e PL/SQL 12-4

O Que uma View?


Tabela EMP
EMPNO ENAME 7839 KING 7839 7782 BLAKE 7698 CLARK 7934 CLARK 7782 MILLER 7566 JONES 7566 JOB JOB PRESIDENT PRESIDENT MANAGER MANAGER MANAGER CLERK MANAGER MANAGER SALESMAN ANALYST SALESMAN CLERK MGR HIREDATE 17-NOV-81 7839 01-MAY-81 09-JUN-81 7782 23-JAN-82 7839 09-JUN-81 7839 02-APR-81 7566 09-DEC-82 7698 28-SEP-81 7788 12-JAN-83 7698 20-FEB-81 SAL COMM DEPTNO SAL COMM DEPTNO 5000 5000 2850 1500 2450 1300 2975 2975 1250 1400 3000 1600 1100 1500 800 3000 950 1250 2850 3000 1250 1600 800 3000 1500 1100 950 1300 1250 500 500 1400 300 0 300 0 300 10 10 30 10 10 10 20 20 30 20 30 20 30 20 30 20 30 30 20 30 20 30 20 30 20 30 10 30 ----- ------- --------- ----- --------- ----- ----- -------------- --------- --------- ----- -------

View EMPVU10 7788 MARTIN 7654 SCOTT


7876 ALLEN 7499 ADAMS

EMPNO 7844 SMITH CLERK ENAME JOB 7902 17-DEC-80 ------ 7369 TURNER SALESMAN 7698 08-SEP-81 -------- ----------7900 FORD ANALYST 7566 7698 03-DEC-81 7839 7902 JAMES CLERK KING PRESIDENT 7698 WARD 7521 BLAKE SALESMAN MANAGER 7839 01-MAY-81 7698 22-FEB-81 7782 7654 FORD ANALYST 7566 03-DEC-81 CLARK MANAGER 7902 MARTIN SALESMAN 7698 28-SEP-81 7369 ALLEN 7698 7934 7499 SMITH CLERK MILLER SALESMAN 7902 17-DEC-80 CLERK 20-FEB-81
7844 SCOTT 7788 TURNER 7900 ADAMS 7876 JAMES 7521 MILLER 7934 WARD ANALYST SALESMAN CLERK CLERK CLERK SALESMAN 7698 08-SEP-81 7566 09-DEC-82 7698 03-DEC-81 7788 12-JAN-83 7698 22-FEB-81 7782 23-JAN-82

12-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Que uma View? Voc pode apresentar combinaes ou subconjuntos lgicos de dados criando views de tabelas. Uma view uma tabela lgica baseada em uma tabela ou outra view. Uma view no contm dados prprios mas como uma janela atravs da qual os dados das tabelas podem ser vistos ou alterados. As tabelas nas quais uma view baseada so chamadas tabelas-base. A view armazenada como uma instruo SELECT no dicionrio de dados.

Introduo ao Oracle: SQL e PL/SQL 12-5

Por Que Usar Views?


Para restringir o acesso a dados Para facilitar as consultas complexas Para permitir a independncia dos dados Para apresentar diferentes views dos mesmos dados

12-6

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Vantagens das Views As views restringem o acesso a dados porque uma view pode exibir colunas seletivas a partir da tabela. As views permitem que usurios faam consultas simples para recuperar resultados de consultas complexas. Por exemplo, as views permitem que usurios consultem informaes de vrias tabelas sem saber como criar uma instruo de juno. As views permitem a independncia de dados para usurios ad hoc e programas aplicativos. Uma view pode ser usada para recuperar os dados de vrias tabelas. As views fornecem acesso aos dados a grupos de usurios de acordo com seus critrios em particular.

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE VIEW".

Introduo ao Oracle: SQL e PL/SQL 12-6

Views Simples e Views Complexas


Recurso Nmero de tabelas Contm funes Contm grupos de dados DML atravs da view Views Simples Views Complexas Uma No No Sim Uma ou mais Sim Sim Nem sempre

12-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Views Simples versus Complexas H duas classificaes para views: simples e complexa. A diferena bsica est relacionada s operaes DML (inserir, atualizar e deletar). Uma view simples uma que: Cria dados a partir de somente uma tabela No contm funes ou grupos de dados Pode executar a DML atravs da view Cria dados a partir de vrias tabelas Contm funes ou grupos de dados Nem sempre executa a DML atravs da view

Uma view complexa uma que:

Introduo ao Oracle: SQL e PL/SQL 12-7

Criando uma View


Embuta uma subconsulta na instruo CREATE VIEW.
View CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW [(apelido[, apelido]...)] AS subconsulta [WITH CHECK OPTION [CONSTRAINT restrio]] [WITH READ ONLY];

A subconsulta pode conter uma sintaxe SELECT complexa. A subconsulta no pode conter uma clusula ORDER BY.
12-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma View Voc pode criar uma view incorporando uma subconsulta na instruo CREATE VIEW. Na sintaxe: OR REPLACE FORCE NOFORCE view apelido recria a view se ela j existir cria a view independentemente das tabelas-base existirem ou no cria a view somente se as tabelas-base existirem (default) o nome da view especifica nomes para as expresses selecionadas pela consulta da view (O nmero de apelidos deve corresponder ao nmero de expresses selecionadas pela view.) uma instruo SELECT completa (Voc pode usar apelidos para as colunas na lista SELECT.)

subconsulta

WITH CHECK OPTION especifica que somente linhas acessveis view podem ser inseridas ou atualizadas restrio WITH READ ONLY o nome atribudo restrio CHECK OPTION assegura que as operaes DML no possam ser executadas nesta view

Introduo ao Oracle: SQL e PL/SQL 12-8

Criando uma View


Crie uma view, EMPVU10, que contenha detalhes sobre os funcionrios no departamento 10.
SQL> 2 3 4 View CREATE VIEW AS SELECT FROM WHERE created. empvu10 empno, ename, job emp deptno = 10;

Descreva a estrutura da view usando o comando DESCRIBE do SQL*Plus.


SQL> DESCRIBE empvu10

12-9

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma View (continuao) O exemplo no slide cria uma view que contm o nmero, nome e cargo para todos os funcionrios no departamento 10. Voc pode exibir a estrutura da view usando o comando DESCRIBE do SQL*Plus.
Name Null? ------------------------------- -------EMPNO NOT NULL ENAME JOB Type -----------NUMBER(4) VARCHAR2(10) VARCHAR2(9)

Diretrizes para criar uma view: A subconsulta que define uma view pode conter sintaxe SELECT complexa, incluindo junes, grupos e subconsultas. A subconsulta que define a view no pode conter uma clusula ORDER BY. A clusula ORDER BY especificada quando voc recupera dados da view. Se voc no especificar um nome de restrio para uma view criada com CHECK OPTION, o sistema ir atribuir um nome default no formato SYS_Cn. Voc pode usar a opo OR REPLACE para alterar a definio da view sem elimin-la e recri-la ou reconceder-lhe os privilgios de objeto anteriormente concedidos.

Introduo ao Oracle: SQL e PL/SQL 12-9

Criando uma View


Crie uma view usando apelidos de coluna na subconsulta.
SQL> 2 3 4 5 View CREATE VIEW AS SELECT FROM WHERE created. salvu30 empno EMPLOYEE_NUMBER, ename NAME, sal SALARY emp deptno = 30;

Selecione as colunas a partir desta view pelos nomes de apelidos dados.

12-10

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma View (continuao) Voc pode controlar os nomes de coluna incluindo apelidos de coluna na subconsulta. O exemplo no slide cria uma view contendo o nmero do funcionrio (empno) com o apelido EMPLOYEE_NUMBER, o nome (ename) com o apelido NAME e o salrio (sal) com o apelido SALARY para o departamento 30. Como alternativa, voc pode controlar os nomes de coluna incluindo apelidos de coluna na clusula CREATE VIEW.

Introduo ao Oracle: SQL e PL/SQL 12-10

Recuperando Dados de uma View


SQL> 2 SELECT * FROM salvu30; NAME SALARY ---------- --------BLAKE 2850 MARTIN 1250 ALLEN 1600 TURNER 1500 JAMES 950 WARD 1250

EMPLOYEE_NUMBER --------------7698 7654 7499 7844 7900 7521 6 rows selected.

12-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Recuperando Dados de uma View Voc pode recuperar os dados de uma view como faria de qualquer tabela. Voc pode exibir o contedo de toda a view ou somente ver linhas e colunas especficas.

Introduo ao Oracle: SQL e PL/SQL 12-11

Consultando uma View

SQL*Plus
SELECT * FROM empvu10;

USER_VIEWS
EMPVU10
SELECT FROM WHERE empno, ename, job emp deptno = 10;

7839 7782 7934

KING PRESIDENT CLARK MANAGER MILLER CLERK

EMP

12-12

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Views no Dicionrio de Dados Depois que a view for criada, voc pode consultar a tabela do dicionrio de dados chamada USER_VIEWS para ver o nome e a definio da view. O texto da instruo SELECT que constitui a view armazenado em uma coluna LONG. Acesso a Dados Usando Views Quando voc acessa dados, usando uma view, o Oracle Server executa as seguintes operaes: 1. Recupera a definio da view da tabela do dicionrio de dados USER_VIEWS. 2. Verifica os privilgios de acesso para a tabela-base da view. 3. Converte a consulta da view em uma operao equivalente nas tabelas ou tabela-base subjacentes. Em outras palavras, os dados so recuperados a partir da(s) tabela(s)-base, ou uma atualizao feita nela(s).

Introduo ao Oracle: SQL e PL/SQL 12-12

Modificando uma View


Modificar a view EMPVU10 usando a clusula CREATE OR REPLACE VIEW. Adicionar um apelido para cada nome de coluna.
SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10; created.

Os apelidos de coluna na clusula CREATE VIEW esto listados na mesma ordem que as colunas na subconsulta.
12-13 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Modificando uma View A opo OR REPLACE permite que uma view seja criada mesmo que uma j exista com esse nome, substituindo, assim, a verso antiga da view para o seu proprietrio. Isso significa que a view poder ser alterada sem eliminar, recriar e reconceder os privilgios de objeto. Observao: Ao atribuir apelidos de coluna na clusula CREATE VIEW, lembre-se de que os apelidos esto listados na mesma ordem que as colunas na subconsulta.

Introduo ao Oracle: SQL e PL/SQL 12-13

Criando uma View Complexa


Criar uma view complexa que contenha funes de grupo para exibir os valores a partir de duas tabelas.
SQL> 2 3 4 5 6 7 View CREATE VIEW AS SELECT FROM WHERE GROUP BY created. dept_sum_vu (name, minsal, maxsal, avgsal) d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal) emp e, dept d e.deptno = d.deptno d.dname;

12-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma View Complexa O exemplo no slide cria uma view complexa de dos nomes de departamento, salrio mnimo e mximo e o salrio mdio por departamento. Note que os nomes alternativos foram especificados para a view. Esse um requisito se uma coluna da view derivar de uma funo ou expresso. Voc poder ver a estrutura da view usando o comando DESCRIBE do SQL*Plus. Exibir o contedo da view emitindo uma instruo SELECT.
SQL> SELECT 2 NAME ACCOUNTING RESEARCH SALES FROM * dept_sum_vu; MINSAL 1300 800 950 MAXSAL AVGSAL

-------------- --------- --------- --------5000 2916.6667 3000 2175 2850 1566.6667

Introduo ao Oracle: SQL e PL/SQL 12-14

Regras para Executar Operaes DML em uma View


Voc poder executar as operaes DML em views simples. Voc no poder remover uma linha se a view contiver:
Funes de grupo Uma clusula GROUP BY A palavra-chave DISTINCT A palavra-chave da pseudocoluna ROWNUM

12-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Executando Operaes DML em uma View Voc poder executar as operaes DML em dados pela view se essas operaes seguirem determinadas regras. Voc poder remover uma linha da view, exceto se ela contiver: Funes de grupo Uma clusula GROUP BY A palavra-chave da pseudocoluna ROWNUM

Introduo ao Oracle: SQL e PL/SQL 12-15

Regras para Executar Operaes DML em uma View


Voc no poder modificar dados em uma view se eles contiverem: Uma das condies mencionadas no slide anterior Colunas definidas por expresses A pseudocoluna ROWNUM Voc no poder adicionar dados se:
A view contiver uma das condies

mencionadas acima ou no slide anterior Houver colunas NOT NULL nas tabelas-base que no forem selecionadas pela view
12-16 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Executando Operaes DML em uma View (continuao) Voc poder modificar os dados em uma view, exceto se ela contiver uma das condies mencionadas no slide anterior e uma dos seguintes: Colunas definidas por expresses por exemplo, SAL * 12 A pseudocoluna ROWNUM Voc poder adicionar dados por uma view, exceto se ela contiver uma das condies acima e houver colunas NOT NULL, sem um valor default, na tabela-base que no forem selecionadas pela view. Todos os valores necessrios devem estar presentes na Lembre-se de que voc esta adicionando valores diretamente na tabela subjacente na view. Para obter mais informaes, consulte o 0racle8 Server SQL Reference, Release 8, "CREATE VIEW".

Introduo ao Oracle: SQL e PL/SQL 12-16

Usando a Clusula WITH CHECK OPTION


Voc poder garantir que a DML na view continue no domnio da view usando a clusula WITH CHECK OPTION.
SQL> 2 3 4 5 View CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM emp WHERE deptno = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck; created.

Qualquer tentativa de alterao do nmero do departamento para qualquer linha na view falhar porque ela violar a restrio WITH CHECK OPTION.
12-17 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando a Clusula WITH CHECK OPTION possvel executar verificaes de integridade referencial pelas views. Voc dever tambm impor restries no nvel de banco de dados. A view poder ser usada para proteger a integridade dos dados, mas o uso muito restrito. A clusula WITH CHECK OPTION especifica que INSERTS e UPDATES executados pela view no tm permisso de criar linhas que a view no possa selecionar e, portanto, ela permite restries de integridade e verificaes de validao de dados a serem impostas aos dados que estiverem sendo inseridos ou atualizados. Se houver uma tentativa de executar operaes DML em linhas que a view no selecionou, ser exibido um erro, com o nome da restrio, se ele tiver sido especificado.
SQL> UPDATE empvu20 2 SET deptno = 10 3 WHERE empno = 7788; update empvu20 * ERRO na linha 1: (ERROR at line1) ORA-01402: violao na clusula where WITH CHECK OPTION na view (view WITH CHECK OPTION where-clause violation)

Observao: Nenhuma linha atualizada porque se o nmero do departamento fosse alterado para 10, a view no seria mais capaz de enxergar o funcionrio. Por isso, com a clusula WITH CHECK OPTION, a view poder ver apenas funcionrios do departamento 20 e no permitir que o nmero de departamento para esses funcionrios seja alterado na view.
Introduo ao Oracle: SQL e PL/SQL 12-17

Negando Operaes DML


Voc poder assegurar que nenhuma operao DML ocorra atravs da adio da opo WITH READ ONLY definio da sua view.
SQL> 2 3 4 5 6 View CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10 WITH READ ONLY; created.

Qualquer tentativa de executar uma DML em uma linha na view resultar em erro no Oracle Server.
12-18 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Negando Operaes DML Voc poder garantir que nenhuma operao DML ocorra na sua view criando-a com a opo WITH READ ONLY. O exemplo no slide modifica a view EMPVU10 para impedir que as operaes DML na view. Quaisquer tentativas de remover uma linha da view resultar em erro.
SQL> DELETE FROM empvu10 2 WHERE employee_number = 7782; DELETE FROM empvu10 * ERRO na linha 1 (ERROR at line 1:) ORA-01752: No possvel deletar da view sem exatamente uma chave preservada tabela (Cannot delete from view without exactly one keypreserved table)

Quaisquer tentativas de inserir uma linha ou modific-la usando a view resultar em erro no Oracle Server -01733: no permitida coluna virtual aqui (virtual column not allowed here).

Introduo ao Oracle: SQL e PL/SQL 12-18

Removendo uma View


Remover uma view sem perder dados porque uma view est baseada em tabelas subjacentes no banco de dados.
DROP VIEW view;

SQL> DROP VIEW empvu10; View dropped.

12-19

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Removendo uma View Voc deve usar a instruo DROP VIEW para remover uma view. A instruo remove a definio da view do banco de dados. A eliminao de views no tem efeito nas tabelas nas quais ela baseada. As views ou outras aplicaes baseadas em views deletadas tornam-se invlidas. Apenas o criador ou usurio com o privilgio DROP ANY VIEW poder remover uma view. Na sintaxe: view o nome da view

Introduo ao Oracle: SQL e PL/SQL 12-19

Views Em Linha
Uma view em linha uma subconsulta subjacente com um apelido (nome de correlao) que pode ser usado em uma instruo SQL. Uma view em linha similar ao uso de uma subconsulta nomeada na clusula FROM da consulta principal. Uma view em linha no um objeto de esquema.

12-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Views Em Linha Uma view em linha na clusula FROM de uma instruo SELECT define uma fonte de dados para a instruo SELECT. No exemplo abaixo, a view em linha b retorna os detalhes de todos os nmeros do departamento e o salrio mximo para cada departamento da tabela EMP. A clusula WHERE a.deptno = b.deptno AND a.sal < b.maxsal de consulta principal exibe os nomes dos funcionrios, salrio, nmeros do departamento e os salrios mximos de todos os funcionrios que ganham menos que o salrio mximo em seus departamentos.
SQL> SELECT 2 3 4 5 6 WHERE AND FROM a.ename, a.sal, a.deptno, b.maxsal emp a, (SELECT FROM deptno, max(sal) maxsal emp

GROUP BY deptno) b a.deptno = b.deptno a.sal < b.maxsal;

ENAME SAL DEPTNO MAXSAL ---------- --------- --------- --------CLARK 2450 10 5000 MILLER 1300 10 5000 ... TURNER 1500 30 2850 JAMES 950 30 2850 10 rows selected.
Introduo ao Oracle: SQL e PL/SQL 12-20

Anlise "Top-N"
As consultas Top-N pedem os maiores ou menores valores n de uma coluna.
Quais so os dez produtos mais

vendidos?
Quais so os dez produtos menos

vendidos? Tanto o conjunto dos maiores quanto dos menores valores so considerados consultas Top-N.

12-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Anlise "Top-N" As consultas Top-N so teis em cenrios onde existe a necessidade de exibir apenas os maiores ou menores registros n de uma tabela baseada em uma condio. Esse conjunto de resultados podem ser para anlise posterior. Por exemplo, ao usar as anlises Top-N voc poder executar os seguintes tipos de consultas: Os trs maiores salrios na empresa Os quatro mais novos contratados da empresa Os dois melhores representantes de vendas que venderam mais produtos Os trs melhores produtos que mais venderam nos ltimos seis meses

Introduo ao Oracle: SQL e PL/SQL 12-21

Executando a Anlise "Top-N"


A estrutura de nvel mais elevado de uma consulta de anlise Top-N :
SQL> SELECT [column_list], ROWNUM 2 FROM (SELECT [column_list] FROM table 3 ORDER BY Top-N_column) 4 WHERE ROWNUM <= N

12-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Executando a Anlise "Top-N" As consultas Top-N usam uma estrutura de consultas aninhadas consistentes com os elementos descritos abaixo: Uma subconsulta ou uma view em linha para gerar a lista classificada de dados. A subconsulta ou a view em linha inclui a clusula ORDER BY para assegurar que a classificao esteja na ordem desejada. Para os resultados recuperando os maiores valores, necessrio um parmetro DESC. Uma consulta externa para limitar o nmero de linhas no conjunto final de resultados. A consulta externa inclui os seguintes componentes: A pseudocoluna ROWNUM, que atribui um valor seqencial iniciando com 1 para cada uma das linhas retornadas da subconsulta. A clusula WHERE, que especifica as linhas n a serem retornadas. A clusula externa WHERE deve usar um operador < ou <=.

Introduo ao Oracle: SQL e PL/SQL 12-22

Exemplo de Anlise "Top-N"


Para exibir os nomes dos funcionrios que recebem os trs maiores salrios e seus nomes na tabela EMP.
SQL> SELECT ROWNUM as RANK, ename, sal 2 FROM (SELECT ename,sal FROM emp 3 ORDER BY sal DESC) 4 WHERE ROWNUM <= 3; RANK --------1 2 3 ENAME ---------KING SCOTT FORD SAL --------5000 3000 3000

12-23

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Exemplo de Anlise "Top-N" O exemplo no slide descreve como exibir os nomes e os salrios dos trs funcionrios mais bem pagos na tabela EMP. A subconsulta retorna os detalhes de todos os nomes de funcionrios e salrios da tabela EMP, classificados em ordem decrescente de salrios. A clusula WHERE ROWNUM < 3 da consulta principal garante que apenas os trs primeiros registros do conjunto de resultados sero exibidos. Eis aqui um outro exemplo de anlises Top-N que usa uma view em linha. O exemplo abaixo usa a view em linha E para exibir os quatro funcionrios mais antigos na empresa.
SQL> SELECT 2 3 4 FROM ROWNUM as SENIOR,E.ename, E.hiredate (SELECT ename,hiredate FROM emp ORDER BY hiredate)E WHERE rownum <= 4; HIREDATE 17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81
Introduo ao Oracle: SQL e PL/SQL 12-23

SENIOR ENAME 1 SMITH 2 ALLEN 3 WARD 4 JONES

--------- ---------- ---------

Sumrio
Uma view criada a partir de dados em outras tabelas ou views. Uma view fornece todas as vantagens a seguir:
Restringe o acesso a bancos de dados Simplifica as consultas Permite a independncia de dados Exibe vrias views dos mesmos dados Pode ser eliminada sem remover os dados

subjacentes
12-24 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Que uma View? Uma view baseada em uma tabela ou em uma outra view e age como uma janela atravs da qual os dados nas tabelas podem ser vistos ou alterados. Uma view no contm dados. A definio de view est armazenada no dicionrio de dados. Voc poder ver a definio de view na tabela de dicionrio de dados USER_VIEWS. Vantagens das Views Restringem o acesso a bancos de dados Simplificam as consultas Permite a independncia de dados Exibem vrias views dos mesmos dados Podem ser removidas sem afetar os dados subjacentes Pode ser uma view simples baseada em uma tabela Pode ser uma view complexa baseada em mais de uma tabela ou pode conter grupos de funes Pode ser substituda se um dos mesmos nomes existir Pode conter uma restrio de verificao Pode ser somente para leitura

Opes de Views

Introduo ao Oracle: SQL e PL/SQL 12-24

Sumrio
Uma view em linha uma subconsulta com um nome apelido. As anlises "Top-N" podem ser executadas usando-se:
Subconsulta Consulta externa

12-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Introduo ao Oracle: SQL e PL/SQL 12-25

Viso Geral do Exerccio


Criando uma view simples Criando uma view complexa Criando uma view com restrio de verificao Tentando modificar dados na view Exibindo definies de view Removendo views

12-26

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc criar views simples e complexas e tentar executar instrues DML nas views.

Introduo ao Oracle: SQL e PL/SQL 12-26

Exerccio 12 1. Crie uma view chamada EMP_VU baseada no nome e nmero do funcionrio e nmero de departamento na tabela EMP. Altere o cabealho do nome do funcionrio para EMPLOYEE. 2. Exiba o contedo da view EMP_VU.
EMPNO EMPLOYEE DEPTNO ----- -------- -----7839 KING 7698 BLAKE 7782 CLARK 7566 JONES 7654 MARTIN 7499 ALLEN 7844 TURNER 7900 JAMES 7521 WARD 7902 FORD 7369 SMITH 7788 SCOTT 7876 ADAMS 7934 MILLER 14 rows selected. 10 30 10 20 30 30 30 30 30 20 20 20 20 10

3. Selecione o texto e o nome da view a partir do dicionrio de dados USER_VIEWS.


VIEW_NAME TEXT ----------- ---------------------------------------EMP_VU SELECT empno, ename employee, deptno FROM emp

4. Usando sua view EMP_VU, insira uma consulta para exibir todos os nomes dos funcionrios e os nmeros de departamento.
EMPLOYEE KING BLAKE CLARK JONES MARTIN ... 14 rows selected. DEPTNO 10 30 10 20 30 ---------- ---------

Introduo ao Oracle: SQL e PL/SQL 12-27

Exerccio 12 (continuao) 5. Crie uma view nomeada DEPT20 que contenha o nmero e o nome do funcionrio e o nmero de departamento de todos os funcionrios no departamento 20. Coloque um label na coluna da view de EMPLOYEE_ID, EMPLOYEE, and DEPARTMENT_ID. No permita que um funcionrio seja reatribudo a um outro departamento na view. 6. Exiba a estrutura e o contedo da view DEPT20.
Name --------------EMPLOYEE_ID EMPLOYEE DEPARTMENT_ID EMPLOYEE_ID ----------7566 7902 7369 7788 7876 Null? Type -------- -----NOT NULL NUMBER(4) VARCHAR2(10) NOT NULL NUMBER(2)

EMPLOYEE DEPARTMENT_ID -------- ------------JONES 20 FORD 20 SMITH 20 SCOTT 20 ADAMS 20

7. Tente reatribuir Smith ao departamento 30. Se voc tiver tempo, complete o exerccio abaixo: 8. Crie uma view chamada SALARY_VU baseada no nome do funcionrio, nome do departamento, salrio e grau de salrio de todos os funcionrios. Coloque um label nas colunas de Employee, Department, Salary e Grade, respectivamente.

Introduo ao Oracle: SQL e PL/SQL 12-28

13
Outros Objetos do Banco de Dados

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivos
Depois de completar esta lio, voc poder fazer o seguinte: Descrever alguns objetos do banco de dados e seus usos Criar, manter e usar seqncias Criar e manter ndices Criar sinnimos particulares e pblicos

13-2

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetivo da Lio Nesta lio, voc aprender a criar e manter alguns dos outros objetos do banco de dados que so normalmente utilizados. Esses objetos incluem seqncias, ndices e sinnimo.

Introduo ao Oracle: SQL e PL/SQL 13-2

Objetos do Banco de Dados


Objeto Tabela Descrio Unidade bsica de armazenamento, composta de linhas e colunas Representa logicamente subconjuntos de dados de uma ou mais tabelas Gera valores de chave primria Melhora o desempenho de algumas consultas Nome alternativo para um objeto

View

Seqncia ndice Sinnimo

13-3

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Objetos do Banco de Dados Muitas aplicaes necessitam usar nmeros exclusivos como valores de chave primria. Voc pode elaborar o cdigo na aplicao para tratar essa necessidade ou usar uma seqncia para gerar nmeros exclusivos. Para melhorar o desempenho de algumas consultas, voc deve considerar criar um ndice. Voc tambm pode usar os ndices para aplicar exclusividade a uma coluna ou um conjunto de colunas. possvel fornecer nomes alternativos para objetos usando sinnimos.

Introduo ao Oracle: SQL e PL/SQL 13-3

O Que uma Seqncia?


Gera nmeros exclusivos automaticamente um objeto compartilhvel geralmente usada para criar um valor de chave primria Substitui o cdigo de aplicao Acelera a eficcia do acesso a valores de seqncia quando esto em cache na memria

13-4

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Que uma Seqncia? Uma seqncia um objeto do banco de dados criado pelo usurio que pode ser compartilhado por vrios usurios para gerar nmeros inteiros exclusivos. Voc pode usar as seqncias para gerar valores de chave primria automaticamente. Um uso comum para as seqncias criar um valor de chave primria, que deve ser exclusivo para cada linha. A seqncia gerada e incrementada (ou diminuda) por uma rotina Oracle8 interna. Esse objeto pode economizar tempo, pois capaz de reduzir a quantidade de cdigo de aplicao necessria para criar uma rotina de gerao de seqncias. Os nmeros de seqncia so armazenados e gerados de modo independente das tabelas. Portanto, a mesma seqncia pode ser usada para vrias tabelas.

Introduo ao Oracle: SQL e PL/SQL 13-4

A Instruo CREATE SEQUENCE


Defina uma seqncia para gerar nmeros seqenciais automaticamente.
CREATE SEQUENCE seqncia [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

13-5

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma Seqncia Gere nmeros de seqncia automaticamente usando a instruo CREATE SEQUENCE. Na sintaxe: seqncia INCREMENT BY n o nome do gerador da seqncia especifica o intervalo entre nmeros de seqncia onde n um nmero inteiro (Se essa clusula for omitida, a seqncia ser incrementada em 1.) especifica o primeiro nmero de seqncia a ser gerado (Se essa clusula for omitida, a seqncia comear com 1.) especifica o valor mximo que a seqncia pode gerar especifica um valor mximo de 10^27 para uma seqncia crescente e 1 para uma seqncia decrescente (Essa a opo default.) especifica o valor de seqncia mnimo especifica um valor mnimo de 1 para uma seqncia crescente e (10^26) para uma seqncia decrescente (Essa a opo default.)

START WITH n MAXVALUE n NOMAXVALUE MINVALUE n NOMINVALUE

Introduo ao Oracle: SQL e PL/SQL 13-5

Criando uma Seqncia (continuao) CYCLE | NOCYCLE especifica que a seqncia continue a gerar valores aps alcanar seu valor mximo ou mnimo ou no gere valores adicionais (NOCYCLE a opo default.) especifica quantos valores o Oracle Server alocar previamente e manter na memria (Por default, o Oracle Server colocar em cache 20 valores.)

CACHE n | NOCACHE

Introduo ao Oracle: SQL e PL/SQL 13-6

Criando uma Seqncia


Crie uma seqncia chamada DEPT_DEPTNO para ser usada na chave primria da tabela DEPT. No use a opo CYCLE.
SQL> CREATE SEQUENCE dept_deptno 2 INCREMENT BY 1 3 START WITH 91 4 MAXVALUE 100 5 NOCACHE 6 NOCYCLE; Sequence created.

13-7

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando uma Seqncia (continuao) O exemplo no slide cria uma seqncia chamada DEPT_DEPTNO para ser usada na coluna DEPTNO da tabela DEPT. A seqncia comea em 91, no permite cache e no permite o ciclo da seqncia. No use a opo CYCLE se a seqncia for utilizada para gerar valores de chave primria, a menos que voc tenha um mecanismo confivel que expurgue linhas antigas mais rpido do que o ciclo da seqncia. Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE SEQUENCE".

Introduo ao Oracle: SQL e PL/SQL 13-7

Confirmando Seqncias
Verifique seus valores de seqncia na tabela do dicionrio de dados USER_SEQUENCES.
SQL> SELECT 2 3 FROM sequence_name, min_value, max_value, increment_by, last_number user_sequences;

A coluna LAST_NUMBER exibe o prximo nmero de seqncia disponvel.

13-8

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Confirmando Seqncias Aps voc criar sua seqncia, ela documentada no dicionrio de dados. J que uma seqncia um objeto do banco de dados, voc pode identific-la na tabela do dicionrio de dados USER_OBJECTS. Tambm possvel confirmar as configuraes da seqncia selecionando a partir da tabela do dicionrio de dados USER_SEQUENCES.
SEQUENCE_NAME CUSTID DEPT_DEPTNO ORDID PRODID MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER 1 1.000E+27 1 100 1 1.000E+27 1 1.000E+27 1 1 1 1 109 91 622 200381

-------------- ----------- --------- ------------ -----------

Introduo ao Oracle: SQL e PL/SQL 13-8

Pseudocolunas NEXTVAL e CURRVAL


NEXTVAL retorna o prximo valor de seqncia disponvel. Retorna um valor exclusivo sempre que feita referncia a ele, at mesmo por usurios diferentes. CURRVAL obtm o valor de seqncia atual. NEXTVAL deve ser emitido para essa seqncia antes que CURRVAL contenha um valor.
13-9 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Seqncia Aps criar a seqncia, voc poder us-la para gerar nmeros seqenciais a serem usados nas suas tabelas. Faa referncia aos valores de seqncia usando as pseudocolunas NEXTVAL e CURRVAL. Pseudocolunas NEXTVAL e CURRVAL A pseudocoluna NEXTVAL usada para extrair nmeros de seqncia sucessivos de uma seqncia especificada. Voc deve qualificar NEXTVAL com o nome da seqncia. Quando voc faz referncia seqncia.NEXTVAL, um novo nmero de seqncia gerado e o nmero de seqncia atual colocado em CURRVAL. A pseudocoluna CURRVAL usada para fazer referncia a um nmero de seqncia que o usurio atual acabou de gerar. NEXTVAL deve ser usado para gerar um nmero de seqncia na sesso do usurio atual antes que seja feita referncia CURRVAL. Voc deve qualificar CURRVAL com o nome da seqncia. Quando feita referncia seqncia.CURRVAL, o ltimo valor retornado ao processo desse usurio exibido.

Introduo ao Oracle: SQL e PL/SQL 13-9

Pseudocolunas NEXTVAL e CURRVAL


NEXTVAL retorna o prximo valor de seqncia disponvel. Retorna um valor exclusivo sempre que feita referncia a ele, at mesmo por usurios diferentes. CURRVAL obtm o valor de seqncia atual. NEXTVAL deve ser emitido para essa seqncia antes que CURRVAL contenha um valor.
13-10 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Regras para Usar NEXTVAL e CURRVAL Voc pode usar NEXTVAL e CURRVAL nos seguintes casos: Na lista SELECT de uma instruo SELECT que no seja parte de uma subconsulta Na lista SELECT de uma subconsulta em uma instruo INSERT Na clusula VALUES de uma instruo INSERT Na clusula SET de uma instruo UPDATE Na lista SELECT de uma view Em uma instruo SELECT com a palavra-chave DISTINCT Em uma instruo SELECT com as clusulas GROUP BY, HAVING ou ORDER BY Em uma subconsulta de uma instruo SELECT, DELETE ou UPDATE Em uma expresso DEFAULT de uma instruo CREATE TABLE ou ALTER TABLE

Voc no pode usar NEXTVAL e CURRVAL nos seguintes casos:

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, seo "Pseudocolumns" e "CREATE SEQUENCE".

Introduo ao Oracle: SQL e PL/SQL 13-10

Usando uma Seqncia


Insira um novo departamento chamado "MARKETING" em San Diego.
SQL> INSERT INTO 2 VALUES 3 1 row created. dept(deptno, dname, loc) (dept_deptno.NEXTVAL, 'MARKETING', 'SAN DIEGO');

Visualize o valor atual para a seqncia DEPT_DEPTNO.


SQL> SELECT 2 FROM dept_deptno.CURRVAL dual;

13-11

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Usando uma Seqncia O exemplo no slide insere um novo departamento na tabela DEPT. Ele usa a seqncia DEPT_DEPTNO para gerar um novo nmero de departamento. Voc pode exibir o valor atual da seqncia:
SQL> SELECT 2 FROM dept_deptno.CURRVAL dual;

CURRVAL ------91

Suponha agora que voc deseje admitir funcionrios para o novo departamento. A instruo INSERT que pode ser executada repetidamente para todos os novos funcionrios pode incluir o seguinte cdigo:
SQL> INSERT INTO emp ... 2 VALUES (emp_empno.NEXTVAL, dept_deptno.CURRVAL, ...);

Observao: O exemplo acima pressupe que uma seqncia EMP_EMPNO j tenha sido criada para gerar um novo nmero de funcionrio.
Introduo ao Oracle: SQL e PL/SQL 13-11

Usando uma Seqncia


Colocar valores de seqncia em cache na memria permite um acesso mais rpido a esses valores. Podem ocorrer intervalos em valores de seqncia quando:
Ocorrer um rollback O sistema falhar Uma seqncia for usada em outra tabela

Visualize a prxima seqncia disponvel, se tiver sido criada com NOCACHE, consultando a tabela USER_SEQUENCES.
13-12 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Colocando Valores de Seqncia em Cache Coloque seqncias em cache na memria para permitir um acesso mais rpido aos valores de seqncia. O cache preenchido na primeira referncia seqncia. Cada solicitao para o prximo valor de seqncia recuperada na seqncia em cache. Aps a ltima seqncia ser usada, a prxima solicitao para a seqncia baixa outro cache de seqncias para a memria. Cuidado com Gaps na sua Seqncia Apesar de os geradores de seqncia emitirem nmeros de seqncia sem gaps, essa ao ocorre independentemente de um commit ou rollback. Portanto, se voc fizer o rollback de uma instruo que contenha uma seqncia, o nmero ser perdido. Outro evento que pode causar gaps na seqncia uma falha do sistema. Se a seqncia colocar valores em cache na memria, esses valores sero perdidos em caso de falha do sistema. J que as seqncias no esto diretamente ligadas s tabelas, a mesma seqncia pode ser usada para vrias tabelas. Se isso ocorrer, cada tabela poder contar gaps nos nmeros seqenciais. Visualizando o Prximo Valor de Seqncia Disponvel Sem Increment-lo Se a seqncia tiver sido criada com NOCACHE, ser possvel visualizar o prximo valor de seqncia disponvel sem increment-lo ao consultar a tabela USER_SEQUENCES.

Introduo ao Oracle: SQL e PL/SQL 13-12

Modificando uma Seqncia


Altere o valor de incremento, o valor mximo, o valor mnimo, a opo de ciclo ou a opo de cache.
SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE 999999 4 NOCACHE 5 NOCYCLE; Sequence altered.

13-13

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Alterando uma Seqncia Se voc alcanar o limite MAXVALUE para sua seqncia, nenhum valor adicional da seqncia ser alocado e ocorrer um erro indicando que a seqncia excede o MAXVALUE. Para continuar a usar a seqncia, voc pode modific-la usando a instruo ALTER SEQUENCE. Sintaxe
ALTER SEQUENCE seqncia [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

onde:

seqncia

o nome do gerador da seqncia

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "ALTER SEQUENCE".

Introduo ao Oracle: SQL e PL/SQL 13-13

Diretrizes para Modificar uma Seqncia


Voc deve ser o proprietrio ou possuir o privilgio ALTER para a seqncia. Somente os nmeros de seqncia futuras so afetados. A seqncia deve ser eliminada e recriada para reiniciar a seqncia em um nmero diferente. Alguma validao executada.

13-14

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Diretrizes Voc deve ser o proprietrio ou possuir o privilgio ALTER para a seqncia a fim de modific-la. Somente os nmeros de seqncia futuros so afetados pela instruo ALTER SEQUENCE. A opo START WITH no pode ser alterada usando ALTER SEQUENCE. A seqncia deve ser eliminada e recriada para reiniciar a seqncia em um nmero difere. Alguma validao executada. Por exemplo, no possvel impor um novo MAXVALUE menor do que o nmero de seqncia atual.

SQL> ALTER SEQUENCE dept_deptno 2 INCREMENT BY 1 3 MAXVALUE 90 4 NOCACHE 5 NOCYCLE; ALTER SEQUENCE dept_deptno * ERROR at line 1: ORA-04009: No possvel tornar MAXVALUE menor do que o valor atual (MAXVALUE cannot be made to be less than the current value)

Introduo ao Oracle: SQL e PL/SQL 13-14

Removendo uma Seqncia


Remova uma seqncia do dicionrio de dados usando a instruo DROP SEQUENCE. Aps remover a seqncia, voc no poder mais fazer referncia ela.
SQL> DROP SEQUENCE dept_deptno; Sequence dropped.

13-15

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Removendo uma Seqncia Para remover uma seqncia do dicionrio de dados, use a instruo DROP SEQUENCE. Voc deve ser o proprietrio da seqncia ou possuir o privilgio DROP ANY SEQUENCE para remov-la. Sintaxe
DROP SEQUENCE seqncia;

onde:

seqncia

o nome do gerador da seqncia

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DROP SEQUENCE".

Introduo ao Oracle: SQL e PL/SQL 13-15

O Que um ndice?
um objeto de esquema usado pelo Oracle Server para acelerar a recuperao de linhas usando um ponteiro Pode reduzir a E/S do disco usando um mtodo rpido de acesso a caminhos para localizar os dados rapidamente independente da tabela que indexa usado e mantido automaticamente pelo Oracle Server

13-16

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

O Que um ndice? Um ndice do Oracle Server um objeto de esquema que pode acelerar a recuperao de linhas usando um ponteiro. Os ndices podem ser criados explcita ou automaticamente. Se no houver um ndice na coluna, ocorrer uma anlise em toda a tabela. Um ndice fornece acesso direto e rpido s linhas em uma tabela. Seu objetivo reduzir a necessidade de E/S do disco usando um caminho indexado para localizar dados rapidamente. O ndice usado e mantido automaticamente pelo Oracle Server. Aps a criao de um ndice, no necessria nenhuma atividade direta do usurio. Os ndices so lgica e fisicamente independentes da tabela que indexam. Isso significa que eles podem ser criados e eliminados a qualquer momento e no tm nenhum efeito sobre as tabelas-base ou outros ndices. Observao: Quando voc elimina uma tabela, os ndices correspondentes tambm so eliminados. Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8, seo "Schema Objects", tpico "Indexes".

Introduo ao Oracle: SQL e PL/SQL 13-16

Como os ndices so Criados?


Automaticamente: Um ndice exclusivo criado automaticamente quando voc define uma restrio PRIMARY KEY ou UNIQUE em uma definio de tabela. Manualmente: Os usurios podem criar ndices no-exclusivos em colunas para acelerar o tempo de acesso s linhas.

13-17

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Como os ndices so Criados? possvel criar dois tipos de ndices. Um tipo um ndice exclusivo. O Oracle Server cria esse ndice automaticamente quando voc define que uma coluna de uma tabela tenha uma restrio PRIMARY KEY ou UNIQUE KEY. O nome do ndice o nome dado restrio. O outro tipo de ndice que um usurio pode criar um ndice no-exclusivo. Por exemplo, voc pode criar um ndice da coluna FOREIGN KEY para uma juno em uma consulta a fim de aumentar a velocidade de recuperao.

Introduo ao Oracle: SQL e PL/SQL 13-17

Criando um ndice
Crie um ndice em uma ou mais colunas.
CREATE INDEX ndice ON tabela (coluna[, coluna]...);

Aumente a velocidade do acesso de consulta na coluna ENAME da tabela EMP.


SQL> CREATE INDEX 2 ON Index created. emp_ename_idx emp(ename);

13-18

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando um ndice Crie um ndice em uma ou mais colunas emitindo uma instruo CREATE INDEX. Na sintaxe: ndice tabela coluna o nome do ndice o nome da tabela o nome da coluna na tabela a ser indexada

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE INDEX".

Introduo ao Oracle: SQL e PL/SQL 13-18

Quando Criar um ndice


Quando a coluna for usada freqentemente na clusula WHERE ou em uma condio de juno. Quando a coluna contiver uma ampla faixa de valores. Quando a coluna contiver um grande nmero de valores nulos. Quando duas ou mais colunas forem usadas juntas com freqncia em uma clusula WHERE ou em uma condio de juno. Quando a tabela for grande e se esperar que a maioria das consultas recupere menos que 2 a 4% das linhas.
13-19 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Mais Nem Sempre Melhor Ter mais ndices em uma tabela no significa que as consultas sero aceleradas. Cada operao DML que seja submetida a commit em uma tabela com ndices significa que os ndices devem ser atualizados. Quanto mais ndices associados a uma tabela voc tiver, maior ser o esforo feito pelo Oracle Server para atualizar todos os ndices aps uma DML. Quando Criar um ndice Quando a coluna for usada freqentemente na clusula WHERE ou em uma condio de juno. Quando a coluna contiver uma ampla faixa de valores. Quando a coluna contiver um grande nmero de valores nulos. Quando duas ou mais colunas forem usadas juntas com freqncia em uma clusula WHERE ou em uma condio de juno. Quando a tabela for grande e se esperar que a maioria das consultas recupere menos que 2 a 4% das linhas.

Lembre-se de que, para aplicar exclusividade, voc deve definir uma restrio exclusiva na definio da tabela. Em seguida, um ndice exclusivo ser criado automaticamente.

Introduo ao Oracle: SQL e PL/SQL 13-19

Quando No Criar um ndice


Quando a tabela for pequena. Quando as colunas no forem utilizadas com freqncia como uma condio na consulta. Quando se esperar que a maioria das consultas recupere mais que 2 a 4% das linhas. Quando a tabela for atualizada com freqncia.

13-20

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Quando No Criar um ndice Quando a tabela for pequena. Quando as colunas no forem utilizadas com freqncia como uma condio na consulta. Quando se esperar que a maioria das consultas recupere mais que 2 a 4% das linhas. Quando a tabela for atualizada com freqncia. Se voc tiver um ou mais ndices em uma tabela, as instrues DML que acessarem a tabela sero mais lentas.

Introduo ao Oracle: SQL e PL/SQL 13-20

Confirmando ndices
A view do dicionrio de dados USER_INDEXES contm o nome do ndice e sua exclusividade. A view USER_IND_COLUMNS contm os nomes do ndice, da tabela e da coluna.
SQL> 2 3 4 5 SELECT FROM WHERE AND ic.index_name, ic.column_name, ic.column_position col_pos,ix.uniqueness user_indexes ix, user_ind_columns ic ic.index_name = ix.index_name ic.table_name = 'EMP';

13-21

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Confirmando ndices Confirme a existncia de ndices na view do dicionrio de dados USER_INDEXES. Tambm possvel checar as colunas envolvidas em um ndice consultando a view USER_IND_COLUMNS. O exemplo no slide exibe todos os ndices anteriormente criados, os nomes de coluna afetados e a exclusividade na tabela EMP.
INDEX_NAME ----------------EMP_EMPNO_PK EMP_ENAME_IDX COLUMN_NAME EMPNO ENAME COL_POS UNIQUENESS 1 UNIQUE 1 NONUNIQUE

--------------- ------- ----------

Observao: A sada foi formatada.

Introduo ao Oracle: SQL e PL/SQL 13-21

ndices Baseados em Funo


Um ndice baseado em funo aquele que se baseia em expresses. Uma expresso de ndice elaborada a partir de colunas de tabela, constantes, funes SQL e funes definidas pelo usurio.
SQL> CREATE TABLE test (col1 NUMBER); SQL> CREATE INDEX test_index on test(col1,col1+10); SQL> SELECT col1+10 FROM test;

13-22

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

ndice Baseado em Funo Os ndices baseados em funo definidos com as palavras-chave UPPER(column_name) ou LOWER(column_name) aceitam pesquisas sem a distino entre maisculas e minsculas. Por exemplo, o ndice a seguir:
SQL> CREATE INDEX uppercase_idx ON emp (UPPER(ename));

Facilita o processamento de consultas como:


SQL> SELECT * FROM emp WHERE UPPER(ename) = 'KING';

Para garantir que o Oracle use o ndice em vez de desempenhar uma anlise em toda a tabela, certifique-se de que o valor da funo no seja nulo em consultas subseqentes. Por exemplo, a instruo abaixo certamente usar o ndice, mas sem a clusula WHERE o Oracle executar uma anlise em toda a tabela.
SQL> SELECT * FROM emp 2 3 WHERE UPPER (ename) IS NOT NULL ORDER BY UPPER (ename);

O Oracle trata os ndices com colunas marcadas como DESC como ndices baseados em funo. As colunas marcadas como DESC so classificadas em ordem decrescente.

Introduo ao Oracle: SQL e PL/SQL 13-22

Removendo um ndice
Remova um ndice do dicionrio de dados.
SQL> DROP INDEX index;

Remova o ndice EMP_ENAME_IDX do dicionrio de dados.


SQL> DROP INDEX emp_ename_idx; Index dropped.

Para eliminar um ndice, voc precisa ser o proprietrio do ndice ou possuir o privilgio DROP ANY INDEX.
13-23 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Removendo um ndice Voc no pode modificar ndices. Para alterar um ndice, voc deve elimin-lo e, em seguida, recri-lo. Remova uma definio de ndice do dicionrio de dados emitindo a instruo DROP INDEX. Para eliminar um ndice, voc precisa ser o proprietrio do ndice ou possuir o privilgio DROP ANY INDEX. Na sintaxe: ndice o nome do ndice

Introduo ao Oracle: SQL e PL/SQL 13-23

Sinnimos
Simplifique o acesso aos objetos criando um sinnimo (outro nome para um objeto). Consulte uma tabela de propriedade de outro usurio. Abrevie nomes de objeto longos.
CREATE [PUBLIC] SYNONYM sinnimo FOR objeto;

13-24

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando um Sinnimo para um Objeto Para consultar uma tabela de propriedade de outro usurio, necessrio preceder o nome da tabela com o nome do usurio que a criou, seguido por um ponto. A criao de um sinnimo elimina a necessidade de qualificar o nome do objeto com o esquema e fornece um nome alternativo para uma tabela, view, seqncia, um procedimento ou outros objetos. Esse mtodo pode ser especialmente til com nomes de objeto longos, tais como views. Na sintaxe: PUBLIC sinnimo objeto Diretrizes O objeto no pode estar contido em um pacote. Um nome de sinnimo particular deve ser distinto de todos os outros objetos de propriedade do mesmo usurio. cria um sinnimo acessvel a todos os usurios o nome do sinnimo a ser criado identifica o objeto para o qual o sinnimo criado

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE SYNONYM".

Introduo ao Oracle: SQL e PL/SQL 13-24

Criando e Removendo Sinnimos


Crie um nome abreviado para a view DEPT_SUM_VU.
SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu; Synonym Created.

Elimine um sinnimo.
SQL> DROP SYNONYM d_sum; Synonym dropped.

13-25

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Criando um Sinnimo para um Objeto (continuao) O exemplo no slide cria um sinnimo para a view DEPT_SUM_VU para referncia mais rpida. A DBA pode criar um sinnimo pblico acessvel a todos os usurios. O exemplo a seguir cria um sinnimo pblico chamado DEPT para a tabela DEPT de Alice:
SQL> CREATE PUBLIC SYNONYM 2 FOR alice.dept; Synonym created. dept

Removendo um Sinnimo Para eliminar um sinnimo, use a instruo DROP SYNONYM. Somente a DBA pode eliminar um sinnimo pblico.
SQL> DROP SYNONYM Synonym dropped. dept;

Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DROP SYNONYM".

Introduo ao Oracle: SQL e PL/SQL 13-25

Sumrio
Gere nmeros de seqncia automaticamente usando um gerador de seqncia. Visualize informaes sobre a seqncia na tabela do dicionrio de dados USER_SEQUENCES. Crie ndices para aumentar a velocidade de recuperao de consultas. Visualize informaes sobre o ndice na tabela do dicionrio USER_INDEXES. Use sinnimos para fornecer nomes alternativos para objetos.
13-26 Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Seqncias O gerador de seqncia pode ser usado para gerar nmeros de seqncia automaticamente para linhas em tabelas. Isso pode economizar tempo e reduzir a quantidade de cdigo de aplicao necessria. Uma seqncia um objeto do banco de dados que pode ser compartilhado com outros usurios. As informaes sobre a seqncia podem ser encontradas na tabela USER_SEQUENCES do dicionrio de dados. Para usar uma seqncia, faa referncia ela com as pseudocolunas NEXTVAL ou CURRVAL. Recupere o prximo nmero na seqncia fazendo referncia seqncia.NEXTVAL. Retorne o nmero disponvel atual fazendo referncia seqncia.CURRVAL.

ndices Os ndices so usados para a velocidade de recuperao de consultas. Os usurios podem visualizar as definies dos ndices na view do dicionrio de dados USER_INDEXES. Um ndice pode ser eliminado pelo criador ou por um usurio que possua o privilgio DROP ANY INDEX usando a instruo DROP INDEX. Sinnimos As DBAs podem criar sinnimos pblicos e os usurios podem criar sinnimos particulares por questes de convenincia usando a instruo CREATE SYNONYM. Os sinnimos permitem nomes abreviados ou nomes alternativos para objetos. Remova os sinnimos usando a instruo DROP SYNONYM.
Introduo ao Oracle: SQL e PL/SQL 13-26

Viso Geral do Exerccio


Criando seqncias Usando seqncias Criando ndices no-exclusivos Exibindo informaes do dicionrio de dados sobre seqncias e ndices Eliminando ndices

13-27

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

Viso Geral do Exerccio Neste exerccio, voc criar uma seqncia a ser usada quando preencher sua tabela DEPARTMENT. Voc tambm criar ndices implcitos e explcitos.

Introduo ao Oracle: SQL e PL/SQL 13-27

Exerccio 13 1. Crie uma seqncia para ser usada com a coluna de chave primria da tabela DEPARTMENT. A seqncia deve comear em 60 e ter um valor mximo de 200. Incremente sua seqncia em dez nmeros. Nomeie a seqncia DEPT_ID_SEQ. 2. Crie um script para exibir as seguintes informaes sobre as seqncias: nome da seqncia, valor mximo, tamanho do incremento e ltimo nmero. Nomeie o script como p13q2.sql. Execute o script.
SEQUENCE_NAME ------------CUSTID DEPT_ID_SEQ ORDID PRODID MAX_VALUE INCREMENT_BY --------- -----------1.000E+27 1 200 10 1.000E+27 1 1.000E+27 1 LAST_NUMBER ----------109 60 622 200381

3. Crie um script interativo para inserir uma linha na tabela DEPARTMENT. Nomeie o script como p13q3.sql. Certifique-se de usar a seqncia criada para a coluna ID. Crie um prompt personalizado para informar o nome do departamento. Execute o script. Adicione dois departamentos chamados Education e Administration. Confirme as adies. 4. Crie um ndice no-exclusivo na coluna de chave estrangeira (dept_id) na tabela EMPLOYEE. 5. Exiba os ndices e as exclusividades existentes no dicionrio de dados para a tabela EMPLOYEE. Salve a instruo em um script chamado p13q5.sql.
INDEX_NAME -------------------EMPLOYEE_DEPT_ID_IDX EMPLOYEE_ID_PK TABLE_NAME -----------EMPLOYEE EMPLOYEE UNIQUENESS --------NONUNIQUE UNIQUE

Introduo ao Oracle: SQL e PL/SQL 13-28

Você também pode gostar