Sei sulla pagina 1di 133

Tcnico em Informtica

Banco de Dados
___________________________________________________________________________________________________

SISTEMAS
GERENCIADORES
DE BANCO
DE DADOS

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
1 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1.

CONCEITOS FUNDAMENTAIS EM SGBD E SUAS APLICAES ............................................ 5


1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
1.10.
1.11.

2.

GERENCIANDO TABELAS............................................................................................................... 16
2.1.
2.2.
2.3.
2.4.
2.5.

3.

ADICIONANDO LINHAS EM UMA TABELA ........................................................................................ 30


COPIANDO LINHAS PARA UMA TABELA........................................................................................... 32

MODELO DE DADOS DO CURSO ................................................................................................... 34


5.1.
5.2.
5.3.

6.

NOT NULL ................................................................................................................................... 23


PRIMARY KEY ............................................................................................................................ 24
UNIQUE........................................................................................................................................ 24
CHECK ......................................................................................................................................... 25
FOREIGN KEY ............................................................................................................................. 25
ADICIONANDO UMA RESTRIO .......................................................................................... 27
ELIMINANDO UMA RESTRIO ............................................................................................ 27
DESABILITANDO UMA RESTRIO ...................................................................................... 27
REABILITANDO UMA RESTRIO ........................................................................................ 27

INSERO DE DADOS ...................................................................................................................... 29


4.1.
4.2.

5.

CRIANDO TABELAS ......................................................................................................................... 17


CRIANDO TABELAS USANDO SUBCONSULTA ................................................................................... 19
ALTERANDO TABELAS .................................................................................................................... 20
ELIMINANDO TABELAS ................................................................................................................... 21
REMOVENDO LINHAS DE UMA TABELA (INSTRUO TRUNCATE) ............................................... 21

RESTRIES ....................................................................................................................................... 23
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8.
3.9.

4.

INTRODUO ................................................................................................................................... 5
CONCEITOS ...................................................................................................................................... 5
OBJETIVOS DE UM SISTEMA DE BANCOS DE DADOS ......................................................................... 6
VANTAGENS ..................................................................................................................................... 6
DESVANTAGENS ............................................................................................................................... 6
ABSTRAO DE DADOS.................................................................................................................... 7
MODELOS LGICOS DE DADOS ........................................................................................................ 8
INFORMAES EM UM BANCO DE DADOS ........................................................................................ 8
LINGUAGEM SQL - DEFINIO E MANIPULAO DE DADOS ......................................................... 12
PAPIS HUMANOS EM UM SISTEMA DE BANCOS DE DADOS ........................................................... 13
ESTRUTURA GERAL DE UM SISTEMA DE BANCOS DE DADOS ......................................................... 14

DIAGRAMA DE ENTIDADES E RELACIONAMENTOS ........................................................ 34


DEFINIO DAS TABELAS IMPLEMENTADAS ................................................................... 35
EXEMPLO DOS DADOS ARMAZENADOS NAS TABELAS .................................................. 36

O COMANDO SELECT E SUAS VARIAES............................................................................... 39


6.1.
6.2.
6.3.
6.4.
6.5.
6.6.
6.7.
6.8.
6.9.
6.9.1.
6.9.2.
6.9.3.
6.9.4.
6.9.5.

SELECT SIMPLES ....................................................................................................................... 39


LISTANDO APENAS LINHAS DISTINTAS, SEM DUPLICATAS (DISTINCT) ..................... 40
SELECIONANDO LINHAS (WHERE) ...................................................................................... 40
OPERADORES RELACIONAIS ................................................................................................. 41
TESTE DE NULOS (IS NULL / IS NOT NULL) .......................................................................... 42
PESQUISA GENRICA (LIKE) .................................................................................................. 43
SOMA E SUBTRAO DE CONJUNTOS (IN).......................................................................... 44
OPERAES ARITMTICAS .................................................................................................... 44
PRINCIPAIS FUNES SQL ...................................................................................................... 46
FUNES CARACTER ............................................................................................................... 46
FUNES NUMRICAS ............................................................................................................ 48
FUNES DE DATA ................................................................................................................... 49
FUNES DE CONVERSO...................................................................................................... 50
FUNES DE GRUPO ................................................................................................................ 55

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
2 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.10.
6.11.
6.12.
6.13.
6.14.
6.15.
6.16.
6.17.
6.18.
6.18.1.
6.18.2.
6.18.3.
6.18.4.
6.19.
6.20.
6.21.
6.22.
6.23.

OPERAES COM DATA E HORA ........................................................................................... 57


TESTE COM INTERVALOS (BETWEEN) ................................................................................ 59
OPERADORES LGICOS (AND / OR) ...................................................................................... 60
CONSTANTES ............................................................................................................................. 61
CONCATENAO (||) ................................................................................................................. 61
AGRUPAMENTO DE LINHAS (GROUP BY) ............................................................................ 62
RESTRIO NO AGRUPAMENTO (HAVING) ........................................................................ 63
CLASSIFICAO DAS LINHAS (ORDER BY) ........................................................................ 64
MANIPULAO RELACIONAL DOS DADOS ........................................................................ 65
JUNO DE TABELAS (JOIN).............................................................................................. 65
AUTO-JUNO ...................................................................................................................... 68
PRODUTO ENTRE TABELAS (PRODUCT) ......................................................................... 68
UNIO DE TABELAS (UNION) ............................................................................................ 69
SUBQUERY ................................................................................................................................. 72
INTERSEO DE TABELAS ..................................................................................................... 73
TESTE DE EXISTNCIA (EXISTS) ............................................................................................ 74
DIFERENA ENTRE TABELAS (NOT IN) ................................................................................ 76
EXERCCIOS PROPOSTOS ........................................................................................................ 77

7.

ALTERANDO DADOS EM UMA TABELA ..................................................................................... 80

8.

REMOVENDO LINHAS DE UMA TABELA ................................................................................... 82

9.

TRANSAES DE BANCO DE DADOS .......................................................................................... 84


9.1.
9.2.
9.3.

10.

ESTADO DOS DADOS ANTES DO FIM DA TRANSAO .................................................... 85


ESTADO DOS DADOS APS O FIM DA TRANSAO .......................................................... 85
EXEMPLO DE COMMIT E ROLLBACK ........................................................................................ 86
VISES ............................................................................................................................................. 88

10.1.
10.2.
10.3.
10.4.
10.5.
10.6.
10.7.
10.8.
11.

CRIANDO VIEWS .......................................................................................................................... 89


CRIANDO VIEWS COMPLEXAS ...................................................................................................... 90
ALTERANDO VIEWS ..................................................................................................................... 90
REGRAS PARA EXECUTAR OPERAES DML EM UMA VIEW ......................................................... 90
USANDO A CLUSULA WITH CHECK OPTION ........................................................................... 91
USANDO A CLUSULA WITH READ ONLY.................................................................................. 91
REMOVENDO UMA VIEW............................................................................................................... 91
VIEWS EM LINHA ......................................................................................................................... 92
SEQNCIAS .................................................................................................................................. 94

11.1.
11.2.
12.

CRIANDO SEQNCIAS ................................................................................................................... 95


PSEUDO COLUNAS NEXTVAL E CURRVAL ................................................................................ 96
NDICE ............................................................................................................................................. 99

12.1.
12.2.
12.3.
13.

REGRAS PARA SE CRIAR UM NDICE .............................................................................................. 100


REGRAS PARA SE NO CRIAR UM NDICE..................................................................................... 100
ELIMINANDO UM NDICE .............................................................................................................. 100
PROGRAMAS (STORED PROCEDURES) ............................................................................... 102

13.1.
13.2.
13.3.
13.4.
13.5.
13.6.
13.7.
13.8.
13.9.
13.10.
13.11.

CRIANDO UM PROCEDIMENTO ...................................................................................................... 102


ESTRUTURA DO CORPO PROCEDURAL (PL/SQL BLOCK) DE UM PROCEDIMENTO .......................... 103
PROCEDIMENTO: .......................................................................................................................... 103
FUNO: ...................................................................................................................................... 103
SEO DE DECLARAO: ............................................................................................................. 103
SEO DE EXECUO: .................................................................................................................. 104
VANTAGENS DAS FUNES .......................................................................................................... 105
LOCAIS POSSVEIS DE CHAMADA DE FUNES .............................................................................. 105
ELIMINANDO UMA FUNO ................................................................................................ 105
COMPARANDO PROCEDIMENTOS E FUNES ................................................................. 105
DECLARANDO VARIVEIS ........................................................................................................ 106

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
3 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.12.
FUNES TEIS ....................................................................................................................... 106
13.13.
DIRETRIZES DE PROGRAMAO .............................................................................................. 107
13.14.
INSTRUES SQL EM PL/SQL ................................................................................................ 107

13.14.1.
13.14.2.
13.15.
13.16.
13.17.
13.18.
13.19.
13.20.
14.

VISO GERAL .............................................................................................................................. 119

14.1.
14.2.
14.3.
14.4.
14.5.
14.6.
14.7.
15.

PRIVILGIOS: ................................................................................................................................ 119


CRIAO DE USURIO: ................................................................................................................. 120
CONCESSO DE PRIVILGIOS: ....................................................................................................... 120
CRIANDO PERFIS (ROLE): ........................................................................................................... 121
CONCEDENDO PRIVILGIOS ROLE:........................................................................................... 121
PRIVILGIOS DE OBJETO .............................................................................................................. 121
REVOGAO DE PRIVILGIOS: ..................................................................................................... 123
GATILHOS (TRIGGERS) ............................................................................................................ 125

15.1.
15.2.
15.3.
15.4.
15.5.
15.6.
15.7.
15.8.
15.9.
15.10.
15.11.
15.12.
15.13.
15.14.
15.15.
15.16.
15.17.
16.

Instrues SELECT em PL/SQL ........................................................................................ 107


Instrues INSERT, UPDATE e DELETE em PL/SQL ...................................................... 108
INSTRUES COMMIT E ROLLBACK EM PL/SQL .............................................................. 108
CURSORES ............................................................................................................................... 109
TRATANDO EXCEES EM PL/SQL ......................................................................................... 111
EXEMPLO DE UM PROCEDIMENTO ............................................................................................ 114
EXEMPLO DE UMA FUNO ..................................................................................................... 116
BENEFCIOS QUE OS PROGRAMAS ARMAZENADOS TRAZEM ..................................................... 117

DIRETRIZES PARA SE PROJETAR GATILHOS ................................................................................... 125


COMPONENTES DE UM GATILHO ................................................................................................... 125
GATILHO BEFORE ...................................................................................................................... 126
GATILHO AFTER ......................................................................................................................... 126
EVENTOS DE ACIONAMENTO ........................................................................................................ 126
TIPOS DE GATILHO: ...................................................................................................................... 127
CORPO DO GATILHO: .................................................................................................................... 127
SEQNCIA DE DISPARO: ............................................................................................................. 127
SINTAXE PARA CRIAO DE GATILHOS DE INSTRUO: .............................................................. 128
EXEMPLO DE GATILHO DE INSTRUO: ................................................................................... 128
USANDO PREDICADOS CONDICIONAIS: ..................................................................................... 129
SINTAXE PARA CRIAO DE GATILHOS DE LINHA:.................................................................. 130
EXEMPLO DE GATILHO DE LINHA: ........................................................................................... 130
USANDO QUALIFICADORES ANTIGOS E NOVOS:........................................................................ 131
DIFERENAS ENTRE GATILHOS E PROCEDIMENTOS: ................................................................. 132
GERENCIANDO GATILHOS: ....................................................................................................... 132
APLICAES DOS GATILHOS: .................................................................................................. 132

BIBLIOGRAFIA ............................................................................................................................ 133

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
4 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1. Conceitos Fundamentais em SGBD e suas Aplicaes


1.1. Introduo
A importncia da informao para a tomada de decises nas organizaes tem
impulsionado o desenvolvimento dos sistemas de processamento de informaes.
Algumas ferramentas:
processadores de texto (editorao eletrnica),
planilhas (clculos com tabelas de valores),
Sistemas de Gerenciamento de Bancos de Dados - SGBDs (armazenamento de
grandes volumes de dados, estruturados em registros e tabelas, com recursos
para acesso e processamento das informaes).
1.2. Conceitos
Banco de Dados
uma coleo de dados inter-relacionados, representando informaes sobre um
domnio especfico.
Exemplos: lista telefnica, controle do acervo de uma biblioteca, sistema de
controle dos recursos humanos de uma empresa.
Sistema de Gerenciamento de Bancos de Dados (SGBD)
um software com recursos especficos para facilitar a manipulao das
informaes dos bancos de dados e o desenvolvimento de programas aplicativos.
Exemplos: Oracle, Ingres, Paradox*, Access*, DBase*., Desktop Database
Management Systems.
Tarefas:
interao com o sistema de arquivos do sistema operacional,
cumprimento da integridade,
cumprimento da segurana,
cpias de segurana (backup) e recuperao,
controle de concorrncia.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
5 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Sistema de Bancos de Dados


um sistema de manuteno de registros por computador, envolvendo quatro
componentes principais:
dados
hardware
software
usurios
O sistema de bancos de dados pode ser considerado como uma sala de arquivos
eletrnica. Existe uma srie de mtodos, tcnicas e ferramentas que visam
sistematizar o desenvolvimento de sistemas de bancos de dados.
1.3. Objetivos de um Sistema de Bancos de Dados
Isolar os usurios dos detalhes mais internos do banco de dados (abstrao de
dados).
Prover independncia de dados s aplicaes (estrutura fsica de
armazenamento e estratgia de acesso).
1.4. Vantagens
rapidez na manipulao e no acesso informao,
reduo do esforo humano (desenvolvimento e utilizao),
disponibilizao da informao no tempo necessrio,
controle integrado de informaes distribudas fisicamente,
reduo de redundncia e de inconsistncia de informaes,
compartilhamento de dados,
aplicao automtica de restries de segurana,
reduo de problemas de integridade.
1.5. Desvantagens
Sem dispositivos de controle adequados, a segurana pode ficar comprometida;
por exemplo, no caso de acesso no autorizado a dados.
A integridade das informaes pode ser comprometida se no houver
mecanismos de controle; por exemplo, no caso de manipulao concorrente de
dados.
A operao do sistema de banco de dados e o desenvolvimento de aplicaes
precisam ser feitos com muita preciso para evitar que informaes no
correspondam realidade.
A administrao do sistema de banco de dados pode se tornar muito complexa
em ambientes distribudos, com grande volume de informaes manipuladas por
uma grande quantidade de usurios.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
6 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1.6. Abstrao de Dados


O sistema de bancos de dados deve prover uma viso abstrata de dados para os
usurios.
A abstrao se d em trs nveis:
Nvel de
Viso dos
Usurios

Nvel do conjunto
de usurios

Nvel de
Armazenamento

Viso 1

Viso 2

. . .

Viso N

Conceitual

Fsico

Nveis de Abstrao
o Nvel fsico: nvel mais baixo de abstrao. Descreve como os dados
esto realmente armazenados, englobando estruturas complexas de
baixo nvel.
o Nvel conceitual: descreve quais dados esto armazenados e seus
relacionamentos. Neste nvel, o banco de dados descrito atravs de
estruturas relativamente simples, que podem envolver estruturas
complexas no nvel fsico.
o Nvel de vises do usurio: descreve partes do banco de dados, de
acordo com as necessidades de cada usurio, individualmente.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
7 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1.7. Modelos Lgicos de Dados


Conjunto de ferramentas conceituais para a descrio dos dados, dos
relacionamentos entre os mesmos e das restries de consistncia e
integridade.
Divide-se em: baseados em objetos e baseados em registros.

Modelos lgicos baseados em objetos


Descrio dos dados nos nveis conceituais e de vises de usurios.
Exemplos:
Entidade-relacionamento,
Orientado a objetos.
No modelo orientado a objetos, cdigo executvel parte integrante do modelo
de dados.

Modelos lgicos baseados em registros


descrio dos dados nos nveis conceituais e de vises de usurios;
o banco de dados estruturado em registros de formatos fixos, de diversos
tipos;
cada tipo de registro tem sua coleo de atributos;
h linguagens para expressar consultas e atualizaes no banco de dados.
Exemplos:
Relacional,
Rede,
Hierrquico.
No modelo relacional, dados e relacionamentos entre dados so representados
por tabelas, cada uma com suas colunas especficas.
1.8. Informaes em um Banco de Dados

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
8 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

No Modelo de Rede

Os dados so representados por colees de registros e os relacionamentos por


elos.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
9 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

No Modelo Hierrquico

Os dados e relacionamentos so representados por registros e ligaes,


respectivamente.
Os registros so organizados como colees arbitrrias de rvores.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
10 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

No Modelo Relacional

Tanto os dados quanto os relacionamentos so representados por tabelas.


Possui fundamento matemtico slido.
Prescinde de estruturas de ndice eficientes e hardware adequado para alcanar
desempenho vivel em situaes prticas.
O Banco de Dados no Nvel Conceitual (modelo ER)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
11 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1.9. Linguagem SQL - Definio e Manipulao de Dados

A linguagem universal para qualquer acesso a um SGBD Relacional


(sistema objeto de curso) a SQL (Structured Query Language). uma
linguagem para criao de bancos de dados e para recuperao e
manuteno dos dados armazenados nestes.

Caractersticas da SQL:
o Usada para controlar todas as funes de um SGBD.
o No por si s um sistema de gerenciamento de banco de dados.
o A responsabilidade pelo armazenamento, gerenciamento fsico e
recuperao dos dados no disco do SGBD.
o uma "linguagem padro" que interage entre o SGBD e os seus
componentes ou outros gerenciadores.
o Os comandos SQL podem ser embutidos em outra linguagem e
utilizados para o acesso ao banco de dados.
o SQL no uma linguagem completa como o Delphi ou VB, pois no
contm poderosos comandos como IF, GOTO ou FOR, no
permitindo assim o desenvolvimento de lgicas de programao.
o Ela composta por um conjunto de comandos especficos para o
gerenciamento de banco de dados.
o dividida em:
 DDL - Data Definition Language
 DRL - Data Retrieval Language
 DML - Data Manipulation Language
 DCL - Data Control Language
o DDL - Data Definition Language
 Define a estrutura e a forma como os dados sero
organizados.
 A compilao dos comandos em DDL armazenada no
dicionrio (ou diretrio) de dados (metadados).
 Tambm coordena o compartilhamento dos dados entre
usurios concorrentes, garantindo que o trabalho de um no
interfira com o de nenhum outro (data sharing) e define regras
de integridade em um banco de dados, protegendo-o da
corrupo por atualizaes concorrentes ou falhas do sistema
(data integrity).

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
12 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

o DRL - Data Retrieval Language


 Permite a um usurio ou a um programa de aplicao
recuperar dados armazenados no banco e utiliz-los.
o DML - Data Manipulation Language
 Permite ao usurio ou ao programa de aplicao atualizar o
banco de dados atravs da incluso de novos dados, remoo
de dados antigos ou alterao de dados armazenados.

o DCL - Data Control Language


 Permite restringir um usurio a recuperao, incluso,
excluso ou alterao dos dados, protegendo assim o acesso
de pessoas no autorizadas.
1.10.

Papis Humanos em um Sistema de Bancos de Dados

Usurios do Banco de Dados


Realizam operaes de manipulao de dados.
programadores de aplicaes,
usurios sofisticados,
usurios especializados,
usurios ingnuos.

Administrador do Sistema de Bancos de Dados


Pessoa (ou grupo) responsvel pelo controle do sistema de banco de
dados.
Administrador de Dados
definio e atualizao do esquema do banco de dados.
Administrador do Banco de Dados (DBA)
definio da estrutura de armazenamento e a estratgia (ou
mtodo) de acesso,
concesso de autorizao para acesso a dados,
definio de controles de integridade,
definio de estratgias para cpia de segurana e
recuperao,
monitoramento do desempenho,
execuo de rotinas de desempenho,
modificao da organizao fsica.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
13 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

1.11.

Estrutura Geral de um Sistema de Bancos de Dados

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
14 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

GERENCIANDO
TABELAS

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
15 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

2. Gerenciando Tabelas
Objetos de um banco de dados
Um SGBD capaz de gerenciar vrios tipos de objetos, e no apenas tabelas. Cada
objeto deve ser criado para que possa ser administrado. Alguns objetos de um SGBD:

Tabela: armazena dados


Viso(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

Tabelas podem ser criadas e ter suas estruturas alteradas a qualquer momento, at
mesmo quando os usurios estiverem usando o banco.
O tamanho de uma tabela definido pela quantidade de espao alocada para ela no
banco.
Os SGBDs tm regras de nomeao de objetos, no Oracle por exemplo, os nomes de
tabelas devem comear com uma letra e podem ter de 1 a 30 caracteres.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
16 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

2.1. Criando tabelas


Para criar uma tabela, utilizamos a instruo DDL: CREATE TABLE.
Sintaxe:

CREATE [GLOBAL TEMPORARY] TABLE tabela


( coluna tipo_de_dados [DEFAULT expr],
coluna tipo_de_dados [DEFAULT expr], ...;

Onde:

tabela  o nome da tabela


coluna  o nome da coluna a ser criada
tipo de dados  o tipo de dados e o comprimento da coluna
DEFAULT expr  especifica um valor a ser gravado se for
omitido na instruo INSERT (impede valores nulos). Deve ser
do mesmo tipo de dados da coluna.

Exemplo:
ORACLE
CREATE TABLE "ITR_VOO"
(
"NR_VOO"
"DT_SAIDA_VOO"
"HR_SAIDA_VOO"
"NR_ROTA_VOO"
"CD_ARNV"
)
MYSQL
CREATE TABLE ITR_VOO
(
NR_VOO
DT_SAIDA_VOO
HR_SAIDA_VOO
NR_ROTA_VOO
CD_ARNV
);

NUMBER(3, 0) ,
DATE NOT NULL,
DATE NOT NULL,
NUMBER(3, 0) ,
VARCHAR2(5)

decimal(3,0) NOT NULL,


DATE
NOT NULL,
TIME
NOT NULL,
decimal(3,0),
VARCHAR(5)

Para se criar uma tabela o usurio deve ter um privilgio especial para tal.
Tipos de Dados mais comuns (podem acontecer variaes nos nomes dependendo do
SGBD utilizado, como por exemplo, NUMERIC equivalente a NUMBER):
ORACLE
TIPO DE DADOS
VARCHAR2(tam_mx)
CHAR(tam_mx)
NUMBER(p,s)

DESCRIO
Dados de caractere de comprimento varivel (at 4 Gb)
Dados de caractere de comprimento fixo
Dados numricos de comprimento varivel
p  nmero total de dgitos
s  nmero de casas decimais

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
17 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

DATE
TIME
LONG
CLOB
RAW e LONG RAW
BLOB
BFILE
MYSQL
TIPO DE DADOS
SMALLINT
INTEGER, INT
FLOAT
DECIMAL, DEC,
NUMERIC
DATE
DATETIME
TIME
CHAR(n)
VARCHAR(n)

Valores de data e hora


Valores de hora
Dados de caractere de comprimento varivel (at 2 Gb)
Dados de caractere de comprimento 1b at 4 Gb
Dados binrios brutos
Dados binrios de at 4 Gb
Dados binrios armazenados em um arquivo externo at 4 Gb

DESCRIO
Nmero inteiro desde -32768 at 32767.
Nmero inteiro desde -2147483648 at 2147483647.
Nmero pequeno em vrgula flutuante de preciso simples.
Os valores vlidos vo desde -3.402823466E+38 at
-1.175494351E-38.
Nmero com vrgula.
Armazena valores de datas.
Combinao de data e hora. O formato de armazenamento
de ano-mes-dia horas:minutos:segundos.
armazena uma hora. O formato de armazenamento
'HH:MM:SS'.
Armazena uma cadeia de tamanho fixo. A cadeia poder
conter desde 0 at 255 caracteres.
Armazena uma cadeia de tamanho varivel. dena-se tendo

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
18 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Criando tabelas usando subconsulta


Um segundo mtodo para criar uma tabela aplicar a clusula da subconsulta AS
para criar a tabela e inserir as linhas retornadas da subconsulta.
Sintaxe:

CREATE TABLE tabela


[( coluna1, coluna2, ...)]
AS subconsulta;

Onde:

tabela  o nome da tabela


coluna  o nome da coluna a ser criada
subconsulta  a instruo SELECT que define o conjunto
de linhas a serem inseridas na nova tabela.

Exemplo:

CREATE TABLE ITR_VOO_BACKUP


(
NR_VOO
DECIMAL(3, 0) ,
DT_SAIDA_VOO
DATE NOT NULL,
HR_SAIDA_VOO
TIME NOT NULL,
NR_ROTA_VOO
DECIMAL(3, 0) ,
CD_ARNV
VARCHAR(5)
)
AS
SELECT *
FROM ITR_VOO
WHERE DT_SAIDA_VOO > 01/01/2005

O nmero de colunas especificadas dever ser igual ao nmero de colunas da


instruo SELECT.
Tabelas especiais:
Basicamente os SGBDs possuem dois grandes conjuntos de tabelas, as tabelas de
usurio que so criadas pelos usurios do banco e as tabelas do dicionrio de
dados que so criadas e mantidas pelo banco e contm informaes sobre o banco
de dados propriamente dito.
As tabelas do dicionrio de dados incluem informaes como: nomes dos usurios,
privilgios concedidos, nome dos objetos, restries, informaes de auditoria, etc.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
19 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

2.2. Alterando tabelas


Para alterar a estrutura de uma tabela, utilizamos a instruo DDL ALTER
TABLE, que pode adicionar uma nova coluna tabela, modificar uma coluna
existente ou definir um valor DEFAULT para a nova coluna.
Sintaxes:

ALTER TABLE tabela


ADD ( coluna tipo_de_dados [DEFAULT expr],
coluna tipo_de_dados [DEFAULT expr], ...;
ALTER TABLE tabela
MODIFY coluna tipo_de_dados [DEFAULT expr],
coluna tipo_de_dados [DEFAULT expr], ...;
ALTER TABLE tabela
DROP COLUMN coluna;

Onde:

tabela  o nome da tabela


coluna  o nome da coluna a ser criada
tipo de dados  o tipo de dados e o comprimento da coluna
DEFAULT expr  especifica um valor a ser gravado se for
omitido na instruo INSERT (impede valores nulos). Deve ser
do mesmo tipo de dados da coluna.

Exemplos (genricos): ALTER TABLE ITR_VOO_BACKUP


ADD (nm_piloto VARCHAR(9))
ALTER TABLE ITR_VOO_BACKUP
MODIFY nm_piloto VARCHAR(30)
ALTER TABLE ITR_VOO_BACKUP
DROP COLUMN nm_piloto
Quando adicionamos uma nova coluna a uma tabela ela se tornar a ltima
coluna da tabela e se a tabela j possua linhas ento a nova coluna ser
inicialmente nula para todas as linhas.
Uma alterao no valor DEFAULT de uma coluna afeta somente as inseres
subseqentes alterao.
No se pode remover a(s) coluna(s) da chave primria de uma tabela.
Ao se diminuir a largura de uma coluna devemos ter cuidado, pois valores podem
ser perdidos.
Usando a instruo ALTER TABLE com a clusula DROP COLUMN podemos
eliminar uma coluna de uma tabela que pode ou no conter dados. Somente uma
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
20 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

coluna pode ser eliminada por vez e no poder ser recuperada. Toda tabela deve
conter pelo menos uma coluna.
2.3. Eliminando tabelas
Para eliminar uma tabela, utilizamos a instruo DDL DROP TABLE, que remove
a definio da tabela no SGBD e remove todos os dados e ndices criados para a
tabela.
Sintaxe:

DROP TABLE tabela

Onde:

tabela  o nome da tabela

Exemplo:

DROP TABLE ITR_VOO_BACKUP

Aps a eliminao da tabela:

Todos os dados so removidos;


As VIEWS e SINNIMOS ficaro invlidos;
Todas as transaes pendentes sofrero COMMIT;
Somente o criador da tabela ou um usurio com privilgio de DROP ANY TABLE
poder remover uma tabela;

Uma vez executada, a instruo DROP TABLE irreversvel.


2.4. Removendo linhas de uma tabela (instruo TRUNCATE)
Para remover linhas de uma tabela existe a instruo DELETE que um comando
DML. Uma alternativa a essa instruo DDL o TRUNCATE que alm de remover
linhas, libera o espao de armazenamento usado por esta tabela.
Sintaxe:
Onde:
Exemplo:

TRUNCATE TABLE tabela;


tabela  o nome da tabela
TRUNCATE TABLE ITR_VOO

Por ser uma instruo DDL no se pode desfaz-la (ROLLBACK), ao contrrio da


instruo DELETE.
Para usar esta instruo deve-se ser proprietrio da tabela ou ter privilgio de
DELETE TABLE para truncar a tabela.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
21 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

ADMINISTRANDO
RESTRIES

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
22 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

3. Restries
Podemos definir restries de integridade para forar regras de negcio nos dados
das tabelas de um banco de dados. Regras de negcio especificam condies e
relacionamentos que devem sempre ser verdadeiros ou falsos.
Quando uma restrio de integridade aplicada a uma tabela, todos os dados da
tabela devem obedecer regra correspondente.
Quando uma instruo SQL que insere ou modifica dados em uma tabela
submetida, o SGBD garante que o dado novo satisfaz restrio de integridade
sem que o programa tenha que faz-lo.
Restries so usadas para impedir que dados invlidos sejam inseridos nas
tabelas, ou seja, para impor regras no nvel de tabela sempre que uma linha for
inserida, atualizada ou apagada.
A restrio deve ser satisfeita para a operao de manipulao de dados ser bemsucedida, e impede que uma tabela seja apagada se houver dependncias de
outras tabelas.
Os seguintes tipos de restrio so vlidos:
3.1. NOT NULL

A restrio NOT NULL (no nulo) para uma coluna requer que esta coluna
deva ter um valor sempre que uma linha for inserida ou atualizada.
Use a restrio NOT NULL quando o dado requerido para a integridade
do banco de dados. Por outro lado, no defina como NOT NULL se o dado
pode ser desconhecido ou no existir quando linhas forem adicionadas ou
modificadas.
Por exemplo, se todos os empregados devem pertencer a um determinado
departamento, ento a coluna que contm o nmero do departamento deve
ser definida com uma restrio NOT NULL
Ao contrrio de outras restries que podem ser definidas como parte da
definio da coluna ou como parte da definio da tabela, a restrio NOT
NULL deve ser definida apenas como parte da definio da coluna.
A restrio PRIMARY KEY (veja a seguir) cria automaticamente uma
restrio NOT NULL para a(s) coluna(s) pertencente(s) chave primria
para assegurar a unicidade entre os valores.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
23 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

3.2. PRIMARY KEY

A restrio de PRIMARY KEY (chave primria) requer que a coluna (ou


conjunto de colunas) seja identificador nico para as linhas da tabela e
garante que no existir nenhuma linha duplicata.
Uma coluna de chave primria no pode conter valores nulos.
Cada tabela s pode ter uma chave primria.
A restrio PRIMARY KEY cria automaticamente uma restrio NOT NULL
e uma restrio UNIQUE para a(s) coluna(s) pertencente(s) chave
primria para assegurar a unicidade entre os valores.
Use as seguintes dicas quando estiver selecionando uma chave primria:
o Sempre que for prtico, crie um gerador automtico de seqncia
numrica (SEQUENCE) para gerar valores nicos para a(s)
coluna(s) da chave primria.
o Escolha coluna(s) cujo(s) dado(s) seja(m) nico(s), porque o
propsito da chave primria identificar univocamente cada linha da
tabela.
o Escolha coluna(s) cujo(s) valor(es) nunca mude(m). O valor da chave
primria usado apenas para identificar uma linha, e seu valor
nunca deve ser alterado.
o Escolha coluna(s) que no contenha(m) valore(s) nulo(s). Por
definio, a restrio PRIMARY KEY no permite que nenhuma linha
contenha valores nulos em nenhuma coluna que pertena chave
primria.
o Escolha coluna(s) numrica e de tamanho reduzido. Chaves
primrias curtas so mais fceis de teclar.
o Evite o uso de chave primria composta (com vrias colunas) pois,
apesar de permitido, elas no satisfazem as outras recomendaes.

3.3. UNIQUE

Uma restrio UNIQUE KEY requer que todo valor na(s) coluna(s) seja nico,
ou seja, no existiro duas linhas com valores duplicados nessa(s) coluna(s).
Escolha essas colunas com cuidado. O propsito dessas restries
diferente da PRIMARY KEY.
Restries UNIQUE KEY so apropriadas para qualquer coluna cujos valores
no permitam duplicatas (inclusive permitem valores nulos).
Restries PRIMARY KEY identifica univocamente cada linha da tabela e
normalmente no tem nenhum significado a no ser de ser nico.
Alguns exemplos onde a restrio UNIQUE so bem utilizadas:
o O nmero do CPF do empregado quando a chave primria a sua
MATRCULA.
o A placa de um veculo quando a chave primria um nmero
seqencial.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
24 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

3.4. CHECK

Uma restrio CHECK requer que uma coluna (ou combinao de colunas)
satisfaa uma determinada condio para cada linha da tabela.
Uma restrio CHECK deve ser uma expresso BOOLEANA (que retorne
verdadeiro ou falso) que avaliada usando o valor da coluna que est sendo
inserido ou alterado.
Use restries CHECK quando voc necessita forar regras de integridade
baseadas em expresses lgicas, como comparaes.
Nunca use restries CHECK quando uma das outras restries pode suprir
o que se deseja.
Exemplos:
o Salrios de empregados nunca podem ser negativos.
o Localizaes de departamentos quando esto limitadas a Rio de
Janeiro, So Paulo e Belo Horizonte.
o O valor da comisso nunca pode ser maior que o salrio.

3.5. FOREIGN KEY

Sempre que duas tabelas contm uma ou mais colunas em comum,


podemos forar um relacionamento entre elas atravs de uma integridade
referencial, ou seja, atravs da restrio de FOREIGN KEY (chave
estrangeira).
A tabela que inclui a chave estrangeira chamada dependente ou filha
A tabela que referenciada chamada de tabela pai.
Uma restrio FOREIGN KEY requer que todos os valores das colunas da
tabela filha existam na tabela pai.
Um exemplo de restrio FOREIGN KEY que a coluna de departamento da
tabela de empregados (tabela filha) deve conter um nmero de departamento
que exista na tabela de departamentos (tabela pai).
Chaves estrangeiras podem ser compostas de mltiplas colunas, e dessa
forma devem se referenciar a chaves primrias tambm compostas, com o
mesmo nmero de colunas e com o mesmo tipo de dados nas colunas
correspondentes, porm os nomes no precisam ser iguais.

As restries so armazenadas no dicionrio de dados. Para que seja mais fcil


fazer referncias s restries criadas, d nomes significativos a elas seno o
SGBD o far dando nomes codificados. As restries podem ser definidas quando a
tabela for criada ou depois de ter sido criada.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
25 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

A seguir um exemplo completo de quando a tabela criada com suas restries.


O mysql implementa restries a partir da verso 5.1.
ORACLE
CREATE TABLE "EMPREGADOS"
(
"MAT_EMPR"
NUMBER(6,0),
"PRIM_NOME"

VARCHAR2(20),

"ULT_NOME"
VARCHAR2(25)
CONSTRAINT "EMP_LAST_NAME_NN"

NOT NULL ENABLE,

"EMAIL" VARCHAR2(25)
CONSTRAINT "EMP_EMAIL_NN"

NOT NULL ENABLE,

"NRO_TELEF"
VARCHAR2(20),
"DATA_CONTR" DATE
CONSTRAINT "EMP_HIRE_DATE_NN"

NOT NULL ENABLE,

"NRO_CARGO"
VARCHAR2(10)
CONSTRAINT "EMP_JOB_NN"

NOT NULL ENABLE,

"VLR_SAL"
"PERC_COMISS"
"MAT_GERENTE"
"NRO_DEPTO"

NUMBER(8,2),
NUMBER(2,2),
NUMBER(6,0),
NUMBER(4,0),

CONSTRAINT EMP_SAL_MIN" CHECK (salary > 0) ENABLE,


CONSTRAINT EMP_EMAIL_UK" UNIQUE ("EMAIL") ENABLE,
CONSTRAINT EMP_PK" PRIMARY KEY ("MAT_EMPR ") ENABLE,
CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("NRO_DEPTO ")
REFERENCES "DEPARTAMENTOS" ("NRO_DEPTO") ENABLE,
CONSTRAINT "EMP_CARGO_FK" FOREIGN KEY ("NRO_CARGO")
REFERENCES CARGOS" ENABLE,
CONSTRAINT "EMP_GER_FK" FOREIGN KEY ("MAT_GERENTE"
REFERENCES "EMPREGADOS" ("MAT_EMPR") ENABLE
)
A restrio FOREIGN KEY impe uma restrio de integridade referencial com a
tabela proprietria da(s) coluna(s) referenciada(s). Um valor de chave estrangeira
deve corresponder a um valor existente na tabela me ou ser nulo. As chaves
estrangeiras so baseadas nos valores dos dados, sendo puramente lgicas, e no
ponteiros fsicos. A opo ON DELETE CASCADE pode ser usada e indica que
quando a linha na tabela me deletada, as linhas dependentes na tabela filha
tambm sero deletadas.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
26 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Uma coluna pode ter vrias restries CHECK (que limita os valores a serem
aceitos para determinada coluna).
3.6. ADICIONANDO UMA RESTRIO
A instruo ALTER TABLE pode ser usada para adicionar uma restrio a uma
tabela, por exemplo:
ALTER TABLE ITR_PSGR
ADD CONSTRAINT ITR_PSGR_FK_002
FOREIGN KEY (CD_PSGR_RESP)
REFERENCES ITR_PSGR (CD_PSGR);
3.7. ELIMINANDO UMA RESTRIO
Para eliminar uma restrio usamos a instruo ALTER TABLE combinada com
DROP, por exemplo:
ALTER TABLE ITR_PSGR
DROP CONSTRAINT ITR_PSGR_FK_002;

3.8. DESABILITANDO UMA RESTRIO


Podemos tambm desativar uma restrio, usando a clusula DISABLE
CONSTRAINT, por exemplo:
ALTER TABLE ITR_PSGR
DISABLE CONSTRAINT ITR_PSGR_FK_002;

3.9. REABILITANDO UMA RESTRIO


Reativando uma restrio:
ALTER TABLE ITR_PSGR
ENABLE CONSTRAINT ITR_PSGR_FK_002;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
27 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

INSERO
DE
DADOS

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
28 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

4. Insero de Dados
A DML (Data Manipulation Language) uma parte essencial do SQL. Quando se
quer adicionar, alterar ou remover dados de um banco de dados executa-se uma
instruo DML.
Um conjunto de instrues DML que formam uma unidade lgica de trabalho
chamada de transao.
Imagine o cliente de um banco transferindo dinheiro de uma conta de poupana
para a conta corrente. Esta transao consiste de quatro operaes separadas:
Abater a valor do saque da conta de poupana
Acrescer a valor do saque na conta corrente
Registrar o lanamento da conta de poupana
Registrar o lanamento da conta corrente
O SGBD deve garantir que todas as instrues SQL sejam executadas para que
as contas estejam com saldos apropriados.
Quando algo impedir a realizao de uma das instrues da transao, as outras
instrues devem ser desfeitas.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
29 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

4.1. Adicionando linhas em uma tabela


Para adicionar novas linhas em uma tabela, utilizamos a instruo DML
INSERT.
Sintaxe:
Onde:

INSERT INTO tabela [(coluna1 [, coluna2 ])]


VALUES (valor1 [,valor2 ]);
tabela o nome da tabela
coluna o nome da coluna a ser preenchida
valor o valor correspondente para a coluna

Exemplos:
INSERT INTO ITR_EQPT
VALUES ('310','AIRBUS A310','JATO',2,'R',210);
INSERT INTO ITR_EQPT
VALUES ('D8S','DOUGLAS SUPER DC8-63','JATO',4,'R',null);
INSERT INTO ITR_CMPN_AEREA
VALUES ('SC','CRUZEIRO DO SUL','BR');
INSERT INTO ITR_ROTA_VOO
VALUES ('11','BOG','GIG',null);
Esta instruo, com a clusula VALUES, adiciona somente uma linha por vez
a uma tabela.
A lista de colunas no requerida na instruo INSERT, entretanto se no for
usada, os valores devero ser informados na ordem em que as colunas
estiverem definidas para a tabela.
Para melhor clareza, recomenda-se a utilizao da lista de colunas.
Colocam-se os valores de datas e caracteres entre aspas simples.
No se coloca valor numrico entre aspas simples.
Para inserir linhas com valores nulos (devemos nos certificar de que a coluna
destino permita valores nulos) existem dois mtodos:
Mtodo Implcito
Neste caso basta omitir a coluna na lista de colunas, pois qualquer coluna
no listada explicitamente receber valor nulo na nova linha.
Mtodo Explcito
Informar a palavra chave NULL na lista de valores (para valores de
caracteres e datas podemos informar a string vazia  )

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
30 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Exerccios:

Cadastrar o Canad na tabela de pases com o cdigo CD e a populao de


26.584.000 habitantes.
INSERT INTO ITR_PAIS
VALUES ('CA','CANADA', 26584000);
1 row created.
Outra soluo:
INSERT INTO ITR_PAIS
(QT_PPLC_PAIS
VALUES ( 26584000

, NM_PAIS
, 'CANADA'

, CD_PAIS)
,'CA'
);

1 row created.
INSERT INTO ITR_PAIS
(NM_PAIS
, CD_PAIS)
VALUES ('CANADA' , 'CA'
);
1 row created.
OBS: Incluso com valor da populao igual a NULO.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
31 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

4.2. Copiando linhas para uma tabela


Para copiar linhas a partir de outra tabela utiliza-se uma subconsulta no lugar
da clusula VALUES.
Sintaxe:
Onde:

Exemplo:

INSERT INTO tabela [(coluna1 [, coluna2 ])]


Subconsulta
tabela o nome da tabela
coluna o nome da coluna a ser preenchida
subconsulta a subconsulta que retorna linhas na tabela
INSERT INTO ITR_VOO
SELECT
NR_VOO
, DT_SAIDA_VOO + 365
, HR_SAIDA_VOO
, NR_ROTA_VOO
, CD_ARNV
FROM ITR_VOO

O comando acima insere novas linhas na tabela ITR_VOO baseando-se


nas linhas j existentes, porm as datas dos novos vos acontecero um ano
aps os vos j cadastrados (DT_SAIDA_VOO + 365).
O nmero de colunas e seus tipos de dados na lista de colunas da instruo
INSERT devem coincidir com o nmero de valores e seus tipos de dados na
subconsulta.
Exerccio:
Incluir novos vos para o ano de 1994 baseados nos vos de 1993. No
incluir os vos at meio-dia.
INSERT INTO ITR_VOO
(SELECT NR_VOO
,ADD_MONTHS(DT_SAIDA_VOO,12)
,NR_ROTA_VOO
,CD_ARNV
FROM ITR_VOO
ORACLE-> WHERE TO_CHAR(DT_SAIDA_VOO,'HH24:MI:SS') NOT BETWEEN '00:00:00'
AND '12:00:00'
MYSQL -> WHERE HR_SAIDA_VOO NOT BETWEEN '00:00:00' AND '12:00:00'
;
828 rows created.
OBS: Incluso com subconsulta.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
32 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

MODELO
DE
DADOS
DO
CURSO

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
33 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

5. MODELO DE DADOS DO CURSO


Para este curso, utilizaremos o modelo de dados de uma empresa que
controla reservas de passagens areas de um pool de companhias de aviao.
Fazem parte do modelo as seguintes tabelas:
ITR_EQPT
Equipamentos de uma aeronave
ITR_ARNV
Aeronaves das companhias areas
ITR_CMPN_AEREA
Companhias areas
ITR_VOO
Vos disponveis
ITR_PSGR
Passageiros cadastrados
ITR_PAIS
Pases
ITR_ROTA_VOO
Rotas de vos existentes
ITR_RESV
Reservas de passagens nos vos
ITR_ARPT
Aeroportos cadastrados
ITR_UF
Unidades da federao
5.1. DIAGRAMA DE ENTIDADES E RELACIONAMENTOS
ITR_EQPT
# CD_EQPT
NM_EQPT
DC_TIPO_EQPT
QT_MOTOR
IC_TIPO_PRPS
QT_PSGR

ITR_VOO
# NR_VOO
# DT_SAIDA_VOO
NR_ROTA_VOO
CD_ARNV

ITR_ROTA_VOO
# NR_ROTA_VOO
CD_ARPT_ORIG
CD_ARPT_DEST
VR_PASG

ITR_ARNV
# CD_ARNV
CD_EQPT
CD_CMPN_AEREA

ITR_PSGR
# CD_PSGR
NM_PSGR
IC_SEXO_PSGR
DT_NASC_PSGR
CD_PAIS
IC_ESTD_CIVIL
CD_PSGR_RESP

ITR_RESV
# CD_PSGR
# NR_VOO
# DT_SAIDA_VOO
PC_DESC_PASG

ITR_CMPN_AEREA
# CD_CMPN_AEREA
NM_CMPN_AEREA
CD_PAIS

ITR_PAIS
# CD_PAIS
NM_PAIS
QT_PPLC_PAIS

ITR_ARPT
# CD_ARPT
CD_PAIS
SG_UF
NM_CIDD

ITR_UF
# SG_UF
NM_UF

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
34 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

5.2. DEFINIO DAS TABELAS IMPLEMENTADAS


TABELA

COLUNA

PK

FORMATO

NULL

ITR_ARNV

CD_ARNV
CD_EQPT
CD_CMPN_AEREA

Y
N
N

VARCHAR2(5)
VARCHAR2(3)
VARCHAR2(2)

N
N
N

ITR_ARPT

CD_ARPT
CD_PAIS
SG_UF
NM_CIDD

Y
N
N
N

VARCHAR2(3)
VARCHAR2(2)
VARCHAR2(2)
VARCHAR2(30)

N
N
Y
N

ITR_PSGR

CD_PSGR
NM_PSGR
IC_SEXO_PSGR
DT_NASC_PSGR
CD_PAIS
IC_ESTD_CIVIL
CD_PSGR_RESP

Y
N
N
N
N
N
N

NUMBER(4,0)
VARCHAR2(30)
VARCHAR2(1)
DATE
VARCHAR2(2)
VARCHAR2(1)
NUMBER(4,0)

N
N
Y
Y
Y
N
Y

ITR_CMPN_AEREA

CD_CMPN_AEREA
NM_CMPN_AEREA
CD_PAIS

Y
N
N

VARCHAR2(2)
VARCHAR2(22)
VARCHAR2(2)

N
N
Y

ITR_EQPT

CD_EQPT
NM_EQPT
DC_TIPO_EQPT
QT_MOTOR
IC_TIPO_PRPS
QT_PSGR

Y
N
N
N
N
N

VARCHAR2(3)
VARCHAR2(38)
VARCHAR2(13)
NUMBER(1,0)
VARCHAR2(1)
NUMBER(3,0)

N
N
N
Y
Y
Y

ITR_PAIS

CD_PAIS
NM_PAIS
QT_PPLC_PAIS

Y
N
N

VARCHAR2(2)
VARCHAR2(25)
NUMBER(10,0)

N
N
Y

ITR_RESV

CD_PSGR
NR_VOO
DT_SAIDA_VOO
PC_DESC_PASG

Y
Y
Y
N

NUMBER(4,0)
NUMBER(3,0)
DATE
NUMBER(5,2)

N
N
N
Y

ITR_ROTA_VOO

NR_ROTA_VOO
CD_ARPT_ORIG
CD_ARPT_DEST
VR_PASG

Y
N
N
N

NUMBER(3,0)
VARCHAR2(3)
VARCHAR2(3)
NUMBER(8,2)

N
N
N
Y

ITR_UF

SG_UF
NM_UF

Y
N

VARCHAR2(2)
VARCHAR2(25)

N
N

ITR_VOO

NR_VOO
DT_SAIDA_VOO
NR_ROTA_VOO
CD_ARNV

Y
Y
N
N

NUMBER(3,0)
DATE
NUMBER(3,0)
VARCHAR2(5)

N
N
N
N

VALID

C ou S

1 a 5
MouR

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
35 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

5.3. EXEMPLO DOS DADOS ARMAZENADOS NAS TABELAS

TABELA ITR_PAIS
CD_PAIS NM_PAIS
------------- ----------------------------------------DE
ALEMANHA
AN
ANTILHAS HOLANDESAS
AR
ARGENTINA
BE
BELGICA
BR
BRASIL
BG
BULGARIA
.....
(61 LINHAS)

PPLC_PAIS
---------------79.112.800
31.928.519
9.907.000
147.404.375
8.989.636

TABELA ITR_CMPN_AEREA
CD_CIA_AEREA
------------------------AA
AF
AR
AW
BA
CP
DT
IB
.....
(45 LINHAS)

NM_CMPN_AEREA
--------------------------------------AMERICAN AIRLINES
AIR FRANCE
AEROLINEAS ARGENTINAS
WILSON TAXI AEREO
BRITISH AIRWAYS
CANADIAN PACIFIC
TAAG
IBERIA

CD_PAIS
-----------US
FR
AR
BR
GB
CA
AO
ES

TABELA ITR_EQPT
CD NM_EQPT
DC_TIPO_EQPT QT_MOTOR IC_ TIPO_PRPS QT_PSGR
------ -------------------------- --------------------- --------------- --------------------- ------------AB3 AIRBUS A300
JATO
2 R
210
BH2 BELL JET RANGER HELICOPTERO
008
CNA CESSNA CARAVAN TURBO HELICE
2 M
010
DH8 BOEING CANADA TURBO HELICE
2 M
230
BEM BANDEIRANTE
TURBO HELICE
2 M
018
.....
(37 LINHAS)
TABELA ITR_ARNV
CD_ARNV CD_EQPT CD_CMPN_AEREA
-------------- --------------- -------------------------TTRIN
767
AA
TTRIO
763
AA
TTRIZ
744
AA
TTRON
313
AA
TTRRU
L10
AA
.....
(420 LINHAS)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
36 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

TABELA ITR_UF
SG_UF
--------BA
ES
GO
MS
.....
(28 LINHAS)

NM_UF
-----------------------------------------BAHIA
ESPIRITO SANTO
GOIAS
MATO GROSSO DO SUL

TABELA ITR_ARPT
CD_ARPT CD_PAIS
-------------- ------------AAX
BR
AEP
AR
AFL
BR
AMM
JO
AOL
AR
ARS
BR
.....
(301 LINHAS)

SG_UF
--------MG
MT
GO

NM_CIDD
-------------------------------ARAXA
BUENOS AIRES
ALTA FLORESTA
AMMAN
PASO DE LOS LIBRES
ARAGARCAS

TABELA ITR_ROTA_VOO
NR_ROTA_VOO CD_ARPT_ORIG CD_ARPT_DEST
----------------------- ----------------------- ----------------------001 AEP
GIG
002 AKL
GIG
003 AMM
GIG
004 AMS
GIG
005 AOL
GIG
006 ASU
GIG
008 BAQ
GIG
.....
(424 LINHAS)

VL_PASG
-------------094000
105000
101000
106000
046000

TABELA ITR_VOO
NR_VOO DT_SAIDA_VOO NR_ROTA_VOO CD_ARNV
------------ ----------------------- ----------------------- -------------001 02-JAN-93
159 TTKFF
001 03-JAN-93
061 TTKNI
001 10-JAN-93
399 TTOCY
001 12-JAN-93
100 TTKBO
002 04-JAN-93
160 TTKZI
002 10-JAN-93
402 TTNNI
002 13-JAN-93
100 TTKBO
003 02-JAN-93
180 TTKZZ
.....
(2.312 LINHAS)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
37 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

TABELA ITR_PSGR
CD_PSGR NM_PSGR
IC
-------------- ----------------------------------------- --1 JOSE CONCESSO ANDRADE M
2 JOAO CARLOS SILVEIRA
M
3 LUIZ GONZAGA GUEDES
M
6 ANTONIO M. PEREIRA
M
7 DIMAS FELISMINO
M
1610 EVANDRO J. OLIVEIRA
M
1611 LEONEL B. RAIMUNDO
M
1614 ANTONIO W. DA SILVA
M
.....
(1.614 LINHAS)

DT_NASC
------------23-JUL-30
28-JUL-35
25-JUL-35
13-SEP-36
13-SEP-36
26-JUN-90
21-AUG-90
16-OCT-90

CD IC_E CD_PS
---- ------- ---------BR S
US S
BR S
EG C
EG C
PE S
0685
SE S
0108
BR S
0688

TABELA ITR_RESV
CD_PSGR
-------------1
1
3
3
4
5
5
6
6
7

NR_VOO
-----------327
828
511
990
548
4
287
366
843
114

DT_SAIDA_VOO
----------------------02-JAN-93
07-JAN-93
07-JAN-93
01-JAN-93
02-JAN-93
06-JAN-93
03-JAN-93
03-JAN-93
02-JAN-93
02-JAN-93

PC_DESC_PASG
---------------------5
0
2
2
1
1
10
1
10
2

.....
(4.267 LINHAS)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
38 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6. O COMANDO SELECT E SUAS VARIAES


6.1. SELECT SIMPLES
Selecionar o cdigo, o nome e a populao de todos os pases da tabela de
pases.
SELECT CD_PAIS
,NM_PAIS
,QT_PPLC_PAIS
FROM ITR_PAIS;
CD_PAIS NM_PAIS
------- ------------------------------------DE
ALEMANHA
AO
ANGOLA
NA
ANTILHAS HOLANDESAS
AR
ARGENTINA
.....
61 rows selected.

QT_PPLC_PAIS
------------79112800
9677000
31928519

Selecionar todas as colunas da tabela de pases


SELECT *
FROM ITR_PAIS;
CD_PAIS NM_PAIS
------- ------------------------------------DE
ALEMANHA
AO
ANGOLA
NA
ANTILHAS HOLANDESAS
AR
ARGENTINA
.....
61 rows selected.

QT_PPLC_PAIS
------------79112800
9677000
31928519

O * significa que todas as colunas de todas as tabelas da consulta sero mostradas.


Facilita a pesquisa, mas no deve ser usado dentro de um programa codificado em linguagem de
programao, pois se uma coluna for adicionada a uma das tabelas listadas, o resultado ser
alterado e o programa no estar preparado para receber dados da coluna adicionada.
Listar somente o nome e a populao dos pases cadastrados (PROJECT)
SELECT NM_PAIS
,QT_PPLC_PAIS
FROM ITR_PAIS;
NM_PAIS
-------------------------------------ALEMANHA
ANGOLA
ANTILHAS HOLANDESAS
ARGENTINA
...
61 rows selected.

QT_PPLC_PAIS
------------79112800
9677000
31928519

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
39 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.2. LISTANDO APENAS LINHAS DISTINTAS, SEM DUPLICATAS


(DISTINCT)

Listar sem repetio


cadastrados.

nome

das

cidades

onde

esto

os

aeroportos

SELECT NM_CIDD
FROM ITR_ARPT;

SELECT DISTINCT NM_CIDD


FROM ITR_ARPT;

NM_CIDD
------------------------------BUENOS AIRES
RIO DE JANEIRO
ALTA FLORESTA
NEW YORK
RIO DE JANEIRO
PASO DE LOS LIBRES
.....
301 rows selected.

NM_CIDD
------------------------------ALTA FLORESTA
ALTAMIRA
ALTO PARNAIBA
AMMAN
AMSTERDAM
ARACAJU
.....
282 rows selected.

6.3. SELECIONANDO LINHAS (WHERE)


A clausula WHERE seleciona as linhas desejadas, delimitando a pesquisa na
tabela.
Listar os aeroportos do estado do Piau
SELECT *
FROM ITR_ARPT
WHERE SG_UF = 'PI';
CD_ARPT
------GDP
PCS
PHB
THE

CD_PAIS
------BR
BR
BR
BR

SG_UF
----PI
PI
PI
PI

NM_CIDD
-------GUADALUPE
PICOS
PARNAIBA
TERESINA

4 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
40 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.4. OPERADORES RELACIONAIS


=
<
<=

igual
menor que
menor ou igual

<>
>
>=

diferente
maior que
maior ou igual

Listar os aeroportos que no esto no Piau


SELECT *
FROM ITR_ARPT
WHERE SG_UF <> 'PI';
CD_ARPT
-------AAX
AFL
.....
201 rows

CD_PAIS
-----BR
BR

SG_UF
----MG
MT

NM_CIDD
------------------ARAXA
ALTA FLORESTA

selected.

OBS:
A tabela de aeroportos contem 301 linhas, 4 aeroportos so do Piau e 201 no, totalizando 205.
Esto faltando 96, que so de UFs desconhecidas (valor nulo). O select s recupera os valores
nulos para uma coluna se for explcito na clausula WHERE o desejo que estas linhas sejam
apresentadas.
Selecionar todos os pases que possuam mais de 200 milhes de habitantes.
SELECT *
FROM ITR_PAIS
WHERE QT_PPLC_PAIS > 200000000;
CD_PAIS
------CN
US
SU

NM_PAIS
QT_PPLC_PAIS
---------------------- ------------CHINA
1133682500
ESTADOS UNIDOS
250858000
UNIAO SOVIETICA
288800000

3 rows selected.
Listar os pases cujo nome seja menor que "MM"
SELECT *
FROM ITR_PAIS
WHERE NM_PAIS < 'MM';
CD_PAIS NM_PAIS
------- ---------------------------DE
ALEMANHA
AO
ANGOLA
AN
ANTILHAS HOLANDESAS
.....
42 rows selected.

QT_PPLC_PAIS
---------------79112800
9677000

Podem ser feitas comparaes "maior/menor que" para colunas tipo caracter, mesmo que o seu
tamanho seja menor que o usado como critrio de seleo.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
41 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.5. TESTE DE NULOS (IS NULL / IS NOT NULL)


No correto testarmos se uma determinada coluna igual a nulo, pois o NULO
representa o desconhecimento da informao. Como saber se algo igual ao
desconhecido?
Listar os aeroportos cuja UF seja desconhecida.
SELECT *
FROM ITR_ARPT
WHERE SG_UF IS NULL;
CD_ARPT CD_PAIS SG_UF NM_CIDD
------- ------- ----- ----------------AEP
AR
BUENOS AIRES
AKL
NZ
AUCKLAND
AMM
JO
AMMAN
MAS
NL
AMSTERDAM
.....
96 rows selected.
Listar os aeroportos cuja UF seja conhecida.
SELECT *
FROM ITR_ARPT
WHERE SG_UF IS NOT NULL;
CD_ARPT
------AAX
AFL
AIF
.....
205 rows

CD_PAIS
------BR
BR
BR

SG_UF
----MG
MT
SP

NM_CIDD
----------------ARAXA
ALTA FLORESTA
ASSIS

selected.

Listar os aeroportos cujo nome da cidade seja desconhecido


SELECT *
FROM ITR_ARPT
WHERE NM_CIDD IS NULL;
no rows selected.
A query acima no faz sentido, pois na tabela ITR_ARPT a coluna NM_CIDD
no permite nulo. Contudo a query executada com sucesso e nenhuma linha
selecionada.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
42 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.6. PESQUISA GENRICA (LIKE)


Podemos pesquisar se as colunas possuem determinadas cadeias de caracteres
com o predicado LIKE. Exemplos:
LIKE 'JOAO%'
LIKE 'J__O%'

LIKE '%JOAO
LIKE '%JOAO%
NOT LIKE 'JOAO%'

Relacionar os nomes completos dos passageiros que se chamam JOAO, e os


cdigos dos pases onde nasceram.
SELECT NM_PSGR, CD_PAIS
FROM ITR_PSGR
WHERE NM_PSGR LIKE JOAO%;
NM_PSGR
CD_PAIS
----------------------------------------------------JOAO CARLOS SILVEIRA
US
JOAO BATISTA VIEIRA
FR
JOAO FERREIRA MARQUES
ES
.....
53 rows selected.

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

Relacionar os nomes e os cdigos dos pases dos passageiros que tenham


SERGIO em seu nome.
SELECT NM_PSGR, CD_PAIS
FROM ITR_PSGR
WHERE NM_PSGR LIKE '%SERGIO%';
NM_PSGR
---------------------------SERGIO DE CASTRO
SERGIO LUIZ TAVARES
SERGIO LUIZ GUEDES
SERGIO JUSTINIANO DA SILVA
SERGIO RICARDO DE SOUZA IT
.....
22 rows selected.

CD_PAIS
------------BR
SE
BR
SE

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
43 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.7. SOMA E SUBTRAO DE CONJUNTOS (IN)


Listar os cdigos dos aeroportos e o nome de suas cidades, localizados
nos estados do Rio de Janeiro, So Paulo ou Minas Gerais.
SELECT CD_ARPT, NM_CIDD
FROM ITR_ARPT
WHERE SG_UF IN ('MG', 'RJ', 'SP');
CD_ARPT
NM_CIDD
--------------------------------------AAX
ARAXA
AIF
ASSIS
AQA
ARARAQUARA
ARU
ARACATUBA
.....
43 rows selected.

Listar os cdigos dos aeroportos e o


daqueles localizados na regio sudeste.

nome

de

suas

cidades,

exceto

SELECT CD_ARPT, NM_CIDD


FROM ITR_ARPT
WHERE SG_UF NOT IN ('MG', 'RJ', 'SP', ES);

6.8. OPERAES ARITMTICAS


A SQL permite operaes aritmticas tanto nas colunas que esto sendo
recuperadas quanto nas da clausula WHERE.
Selecionar os nmeros das rotas que partem do aeroporto de MIAMI e o
valor da passagem com uma majorao de 20 %
SELECT NR_ROTA_VOO, VR_PASG * 1.2
FROM ITR_ROTA_VOO
WHERE CD_ARPT_ORIG = 'MIA';
NR_ROTA_VOO VR_PASG*1.2
----------- ----------270
123600
271
54000
272
56400
273
96000
.....
16 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
44 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Listar o nome dos equipamentos no JATO com sua capacidade de transporte


de passageiros acrescida de 10 passageiros.
SELECT NM_EQPT, QT_PSGR + 10
FROM ITR_EQPT
WHERE DC_TIPO_EQPT NOT LIKE '%JATO%';
NM_EQPT
--------------------------BELL JET RANGER III
BOEING CANADA DHC8 DASH 8
FAIRCHILD-FH-227B
FOKKER-F27 FRIENDSHIP
...
9 rows selected.

QT_PSGR+10
----------18
240
75

OBS. Equipamentos sem informao da capacidade de passageiros (QT_PSGR


nulo), no foram afetados pela operao de adio.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
45 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.9. PRINCIPAIS FUNES SQL


Existem diversas funes padres. Cada SGBD, entretanto, implementa vrias
outras. Veremos aqui somente as principais. AS descries de todas as funes
esto disponveis nos manuais de SQL.
Tipos de funes:
- de linha: atuam em cada linha de tabela (caracter, numrica, data/hora,
converso, usurio)
- de grupo: atuam em um grupo de linhas de tabela
6.9.1. FUNES CARACTER
a) SUBSTR/SUBSTRING(char,m,n) - retorna n bytes de char a partir da posio m
Listar os primeiros 10 caracteres do nome de cada passageiro cadastrado
ORACLE
SELECT SUBSTR(NM_PSGR,1,10)
FROM ITR_PSGR;

MYSQL
SELECT SUBSTRING(NM_PSGR,1,10)
FROM ITR_PSGR

SUBSTR(NM_
------------------JOSE CONCE
JOAO CARLO
LUIZ GONZA
LUIZ DA CO
....
1614 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
46 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

b) INSTR(char1,char2,m,n) - retorna a posio da ocorrncia m de char2 em char1 a partir da


posio n em char1
Listar os 2 primeiros nomes de cada passageiro
ORACLE
SELECT SUBSTR(NM_PSGR,1,(INSTR(NM_PSGR,' ',1,2)))
FROM ITR_PSGR;
MYSQL
SELECT SUBSTRING(NM_PSGR ,1,LOCATE(' ',NM_PSGR,LOCATE(' ',NM_PSGR) + 1))
FROM ITR_PSGR;
SUBSTR(NM_PSGR,1,(INSTR(NM_PSG
----------------------------------JOSE CONCESSO
JOAO CARLOS
LUIZ GONZAGA
LUIZ DA
WALMIR ALVARENGA
...
1614 rows selected.
c) LENGTH(char) - retorna o tamanho de char
Listar o nome e o tamanho deste nome de cada UF cadastrada, que se inicia
com a letra A.
ORACLE
SELECT NM_UF
,LENGTH(NM_UF)
FROM ITR_UF
WHERE SUBSTR(NM_UF,1,1) = 'A';
NM_UF
------------------------ACRE
ALAGOAS
AMAZONAS
AMAPA

MYSQL
SELECT NM_UF
,LENGTH(NM_UF)
FROM ITR_UF
WHERE SUBSTRING(NM_UF,1,1) = 'A';

LENGTH(NM_UF)
-------------4
7
8
5

4 rows selected.
d) TABELA DUAL (ORACLE)
Tabela criada automaticamente na instalao do Oracle. Tem apenas uma coluna (DUMMY) e
apenas uma linha com DUMMY = X. Por ter apenas uma linha muito til quando se necessita
obter valores de variveis, expresses e pseudocolumns, pois retornar apenas uma linha com o
resultado desejado.
SELECT *
FROM DUAL;
D
X

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
47 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.9.2. FUNES NUMRICAS


a) CEIL(n) - retorna o menor inteiro maior ou igual a n
SELECT CEIL(13.0),CEIL(13.2),CEIL(13.7)
[ FROM DUAL; ]
MYSQL DISPENSA A CLUSULA FROM
CEIL(13.0)
--------------13

CEIL(13.2)
--------------14

CEIL(13.7)
--------------14

b) FLOOR(n) - retorna o maior inteiro menor ou igual a n


SELECT FLOOR(13.0), FLOOR(13.2), FLOOR(13.7)
[ FROM DUAL; ]
MYSQL DISPENSA A CLUSULA FROM
FLOOR(13.0)
-----------------13

FLOOR(13.2)
-----------------13

FLOOR(13.7)
-----------------13

c) MOD(m,n) - retorna o resto da diviso de m por n


SELECT MOD(11,4), MOD(10,4), MOD(9,4), MOD(8,4)
[ FROM DUAL; ]
MYSQL DISPENSA A CLUSULA FROM
MOD(11,4)
MOD(10,4)
--------------- ---------------3
2

MOD(9,4)
MOD(8,4)
------------- ------------1
0

d) ROUND(n,m) - retorna valor arredondado de n com m decimais


SELECT ROUND(8.11), ROUND(8.15,1), ROUND(8.50), ROUND(8.77)
[ FROM DUAL; ]
MYSQL DISPENSA A CLUSULA FROM
ROUND(8.11)
----------8

ROUND(8.15,1)
------------8.1

ROUND(8.50)
----------8

ROUND(8.77)
----------9

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
48 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.9.3. FUNES DE DATA


Alguns SGBDs implementam os formatos de data como DATE e hora como
TIME separadamente. Outros implementam apenas o formato DATE
englobando data e hora.
O ORACLE implementa DATE para data e hora, armazenando sempre um
nmero de 7 bytes, que representa o sculo, ano, ms, dia, minuto e segundo a
partir de 01 de janeiro de 4712 BC, podendo armazenar at 31 de dezembro de
4712 AD.
a) SYSDATE / NOW( ) - retorna a data e hora corrente
ORACLE
SELECT SYSDATE DATA HOJE
FROM DUAL;

MYSQL
SELECT NOW() DATA HOJE

DATA HOJE
----------------12-JAN-99
- O formato de output do sysdate acima o default. Adiante veremos como
exibir em outros formatos, inclusive com a hora.
- Para cada coluna selecionada podemos informar um cabealho para output.
DATA HOJE o cabealho para a coluna SYSDATE.
b) ADD_MONTHS(d,n) - soma ou subtrai n meses da data d
DATE_ADD (data , INTERVAL tipo expr), DATE_SUB (data , INTERVAL tipo expr)
ORACLE
SELECT ADD_MONTHS('31-MAR-99',-1)
ADD_MONTHS('31-MAR-99',1)
FROM DUAL;

PASSADO,
PRXIMO

MYSQL
SELECT DATE_SUB('1999-03-31 23:59:59' , INTERVAL 1 MONTH) PASSADO,
DATE_ADD('1999-03-31 23:59:59' , INTERVAL 1 MONTH) PRXIMO ;
PASSADO
--------28-FEB-99

PRXIMO
--------30-APR-99

c) LAST_DAY(d) - retorna a data do ltimo dia do ms da data d


ORACLE
SELECT SYSDATE HOJE
,LAST_DAY(SYSDATE) "LTIMO DIA"
FROM DUAL;
HOJE
--------12-JAN-99

MYSQL
SELECT CURRENT_DATE HOJE
,LAST_DAY(CURRENT_DATE)

"LTIMO DIA"

LTIMO DIA
---------31-JAN-99

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
49 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.9.4. FUNES DE CONVERSO


ORACLE
a) TO_CHAR(d,fmt) - converte a data ou nmero d para o formato fmt
SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS')
FROM DUAL;
TO_CHAR(SYSDATE,'DD/MM/YYYYHH24:MI:SS')
--------------------------------------12/01/1999 14:25:31
SELECT TO_CHAR(1234,9999.99)
FROM DUAL;
TO_CHAR
------1234.00
b) TO_DATE(char,fmt) - converte char para uma data no formato fmt
SELECT TO_DATE('01/02/1999 16:30:15','DD/MM/YYYY HH24:MI:SS')
FROM DUAL;
TO_DATE('
--------01-FEB-99

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
50 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

PRINCIPAIS FORMATOS DE DATA


D
DD
DDD
DAY
DY
MM
MONTH
MON
YY
YYYY
HH
HH24
MI
SS
SSSSS
- / , . ; :
text

dia da semana (1-7;SUN=1 )


dia do ms (01-31)
dia do ano (1-366)
dia da semana por extenso (9 caracteres)
dia da semana abreviado (3 caracteres)
ms do ano (01-12;JAN=01)
ms por extenso (9 caracteres)
ms abreviado (3 caracteres)
ano com 2 dgitos
ano com 4 dgitos
hora (01-12)
hora (00-23)
minuto (00-59)
segundos (00-59)
segundos a partir de meia-noite (00000-86399)
constantes j definidas
qualquer texto entre aspas

EXEMPLOS DE FORMATOS DE DATA


SELECT TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI:SS')
FROM DUAL;
13/01/1999 14:03:26
SELECT TO_CHAR(SYSDATE,'"HOJE DIA" DD/MM/YYYY')
FROM DUAL;
HOJE DIA 13/01/1999
SELECT TO_CHAR(SYSDATE,'MONTH DD, YYYY')
FROM DUAL;
JANUARY

13, 1999

SELECT TO_CHAR(SYSDATE,'D DDD DAY DY MON')


FROM DUAL;
4 013 WEDNESDAY WED JAN

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
51 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

PRINCIPAIS FORMATOS NUMRICOS


9
0
$
S
D
G
L
.
,

completa o formato com brancos esquerda


completa o formato com zeros esquerda
inclui o caracter $ esquerda
inclui o sinal - ou + esquerda ou direita
formata com o caracter de ponto decimal
formata com o caracter de agrupamento (milhar)
inclui o caracter de moeda esquerda
inclui o caracter . como ponto decimal
inclui o caracter , como agrupamento (milhar)

OBS: os formatos D, G e L so customizveis.


EXEMPLO DE FORMATOS NUMRICOS
SELECT TO_CHAR(125600.12,'$999,999,990.99')
FROM DUAL;
TO_CHAR(1256
---------------------$125,600.12
SELECT TO_CHAR(-125600.12,L0G999G999D99S')
FROM DUAL;
TO_CHAR(-125600.12,'L
--------------------------------$0,125,600.12SELECT TO_CHAR(125600.12,L000G999D99S')
FROM DUAL;
TO_CHAR(-125600.12,'L
--------------------------------$125,600.12+

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
52 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

MYSQL
DATE_FORMAT(data,formato): Formata o valor de data de acordo com a string formato string. Os
seguintes identificadores podem ser utilizados na string formato:
%M
%W
%D
%Y
%y
%X
%x
%a
%d
%e
%m
%c
%b
%j
%H
%k
%h
%I
%l
%i
%r
%T
%S
%s
%f
%p
%w
%U
%u
%V
%v
%%

Nome do ms (January..December)
Nome da semana (Sunday..Saturday)
Dia do ms com sufixo Ingls (0th, 1st, 2nd, 3rd, etc.)
Ano, numerico, 4 digitos
Ano, numerico, 2 digitos
Ano para a semana onde o Domingo o primeiro dia da semana, numerico, 4 digitos;
usado com %V
Ano para a semana onde a segunda o primeiro dia da semana, numerico, 4 digitos;
usado com %v
Nome da semana abreviado (Sun..Sat)
Dia do ms, numerico (00..31)
Dia do ms, numerico (0..31)
Ms, numerico (00..12)
Ms, numerico (0..12)
Nome do ms abreviado (Jan..Dec)
Dia do ano (001..366)
Hora (00..23)
Hora (0..23)
Hora (01..12)
Hora (01..12)
Hora (1..12)
Minutos, numerico (00..59)
Tempo, 12-horas (hh:mm:ss seguido por AM ou PM)
Tempo, 24-horas (hh:mm:ss)
Segundos (00..59)
Segundos (00..59)
Microsegundos (000000..999999)
AM ou PM
Dia da semana (0=Domingo..6=Sabado)
Semana(00..53), onde o Domingo o primeiro dia da semana.
Semana(00..53), onde a Segunda o primeiro dia da semana.
Semana(01..53), onde o Domingo o primeiro dia da semana; usado com %X
Semana(01..53), onde a Segunda o primeiro dia da semana; usado com %x
Um literal %.

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');


 'Saturday October 1997'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
 '22:23:00
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');
 '4th 97 Sat 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w');
 '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
 '1998 52'
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
53 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

STR_TO_DATE(str,format)
Esta a funo reversa da funo DATE_FORMAT(). Ela pega uma string str, e um
formato format, e retorna uma valor DATETIME.
mysql> SELECT STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i')
 2003-10-03 09:20:00
mysql> SELECT STR_TO_DATE('10rap', '%crap')
 0000-10-00 00:00:00
mysql> SELECT STR_TO_DATE('2003-15-10 00:00:00', '%Y-%m-%d %H:%i:%s')
 NULL

FORMAT(X,D)
Formata o nmero X com um format como '#,###,###.##', arredondado para D casas
decimais, e retorna o resultado como uma string. Se D 0, o resultado no ter nehum ponto
decimal ou parte fracionria:
mysql> SELECT FORMAT(12332.123456, 4);
 '12,332.1235'
mysql> SELECT FORMAT(12332.1,4);
 '12,332.1000'
mysql> SELECT FORMAT(12332.2,0);
 '12,332

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
54 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.9.5. FUNES DE GRUPO


a) AVG - calcula a mdia dos valores de uma coluna
Calcular o valor mdio do preo dos bilhetes das rotas que partem do
aeroporto JFK
SELECT ROUND(AVG(VR_PASG),2) VALOR MDIO
FROM ITR_ROTA_VOO
WHERE CD_ARPT_ORIG = 'JFK';
VALOR MDIO
----------637.86
b) COUNT - retorna a quantidade de linhas de uma query
Mostrar a quantidade de passageiros cadastrados, a quantidade de
passageiros que tem responsveis e a quantidade de passageiros que so
responsveis por outros.
SELECT COUNT(*) PASSAGEIROS
,COUNT(CD_PSGR_RESP) "TEM RESPONSVEL"
,COUNT(DISTINCT CD_PSGR_RESP) "SO RESPONSVEIS
FROM ITR_PSGR;
PASSAGEIROS
----------1614

TEM RESPONSVEL
--------------431

SO RESPONSVEIS
---------------352

c) MAX - retorna o valor mximo de uma coluna


Mostrar a quantidade
transportar.

mxima

de

passageiros

que

um

equipamento

pode

SELECT MAX(QT_PSGR)
FROM ITR_EQPT;
MAX(QT_PSGR)
-----------520
Mostrar o cdigo do equipamento e a quantidade mxima de passageiros que
um equipamento pode transportar?
SELECT CD_EQPT, MAX(QT_PSGR)
FROM ITR_EQPT;
ERRO !!!!!!
Quando misturamos colunas normais de tabelas com colunas resultantes de
funes de grupo, precisamos usar uma clusula de agrupamento de linhas
(GROUP BY) explicada mais adiante.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
55 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

d) MIN - retorna o valor mnimo de uma coluna

Qual a data de nascimento do passageiro mais idoso, cadastrado no sistema


?
SELECT MIN(DT_NASC_PSGR)
FROM ITR_PSGR;
MIN(DT_NA
--------23-JUL-30
e) SUM - retorna o somatrio dos valores de uma coluna
Listar a quantidade total de passageiros possveis de se transportar nos
equipamentos de 3 motores.
SELECT SUM(QT_PSGR)
FROM ITR_EQPT
WHERE QT_MOTOR = 3;
SUM(QT_PSGR)
-----------1215

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
56 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.10.

OPERAES COM DATA E HORA (ORACLE)

Listar os vos programados para sarem antes do dia 14 de janeiro de


1993.
SELECT *
FROM ITR_VOO
WHERE DT_SAIDA_VOO < '14-JAN-93';
NR_VOO DT_SAIDA_VOO
------ -----------1 02-JAN-93
1 03-JAN-93
1 10-JAN-93
1 12-JAN-93
2 04-JAN-93
....
1462 rows selected.

NR_ROTA_VOO
----------159
61
399
100
160

CD_ARNV
-------TTKFF
TTKNI
TTOCY
TTKBO
TTKZI

Listar o cdigo, o nome e a data de nascimento de todos os passageiros


que so menores de idade (menos de 18 anos)
SELECT *
FROM ITR_PSGR
WHERE DT_NASC_PSGR > ADD_MONTHS(SYSDATE,-216);
CD_PSGR NM_PSGR
------- -----------------------------------------------1424 TARCISIO MOREIRA PORTES
1425 MAURO MARTINS COSTA
1426 FRANCISCO DE ASSIS PEREIRA
1427 ALVARO SIMOES DA C. NETO
1428 ANTONIO CARLOS DA SILVA
1429 LUIZ FERNANDO RIBEIRO
....
190 rows selected.

DT_NASC_P
--------17-MAR-81
20-JAN-81
17-FEB-81
17-MAR-81
14-APR-81
04-AUG-81

Listar sem repetio o cdigo dos passageiros que viajaram h mais de 20


dias.
SELECT DISTINCT CD_PSGR
FROM ITR_RESV
WHERE SYSDATE - DT_SAIDA_VOO > 20;
CD_PSGR
------1
3
4
5
....
1594 rows selected.
Operaes aritmticas de soma e subtrao com data sempre se referem quantidade de dias.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
57 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Listar o dia, o ms e o ano da data atual e da data de nascimento do


passageiro 012, e o nmero de dias decorridos desde sua data de
nascimento at o dia de hoje.
SELECT SUBSTR(SYSDATE,1,2) DD
,SUBSTR(TO_CHAR(SYSDATE,'MM'),1,2) MM
,SUBSTR(SYSDATE,8,2) AA
,SUBSTR(DT_NASC_PSGR,1,2) DD
,SUBSTR(TO_CHAR(DT_NASC_PSGR,'MM'),1,2) MM
,SUBSTR(DT_NASC_PSGR,8,2) AA
,TRUNC(SYSDATE - DT_NASC_PSGR) DIAS
FROM ITR_PSGR
WHERE CD_PSGR = 12;
DD MM AA DD MM AA DIAS
-- -- -- -- -- -- ----14 01 99 13 07 38 22100
Selecionar o nmero do vo, a data e hora de sada e um novo horrio com
atraso de 7 horas e 15 minutos para o vo 103
SELECT NR_VOO,
SUBSTR(TO_CHAR(DT_SAIDA_VOO, 'DD/MM/YYYY HH24:MI:SS'),1,20)
"HORRIO SADA",
SUBSTR(TO_CHAR(DT_SAIDA_VOO+(435/1440), 'DD/MM/YYYY
HH24:MI:SS'),1,20) "NOVO HORRIO"
FROM ITR_VOO
WHERE NR_ROTA_VOO = 103;
NR_VOO
-----667
438
439
236
237

HORRIO SADA
------------------11/01/1993 14:00:00
16/01/1993 04:00:00
15/01/1993 05:00:00
15/01/1993 09:00:00
15/01/1993 18:00:00

NOVO HORRIO
------------------11/01/1993 21:15:00
16/01/1993 11:15:00
15/01/1993 12:15:00
15/01/1993 16:15:00
16/01/1993 01:15:00

5 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
58 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.11.

TESTE COM INTERVALOS (BETWEEN)

Selecionar os
passageiros.

equipamentos

que

podem

transportar

entre

200

300

SELECT CD_EQPT, NM_EQPT


FROM ITR_EQPT
WHERE QT_PSGR BETWEEN 200 AND 300;
CD_
NM_EQPT
------ -------------------------------------AB3
AIRBUS A300
DC8
DOUGLAS DC-8
DC9
DOUGLAS DC-9
DH8
BOEING CANADA DHC8 DASH 8
D10
DOUGLAS DC-10
.....
11 rows selected.
Listar os nmeros dos vos com suas respectivas datas e horas de partida
que sairo entre os dias 1 e 2 de janeiro de 93.
SELECT

NR_VOO
,TO_CHAR(DT_SAIDA_VOO, 'DD/MM/YYY HH24:MI:SS') SADA
FROM ITR_VOO
WHERE DT_SAIDA_VOO BETWEEN '01/JAN/93' AND
TO_DATE('02/JAN/93 23:59:59','DD/MON/YY HH24:MI:SS');

NR_VOO SADA
------ -----------------666 02/01/993 15:00:00
672 01/01/993 15:00:00
677 01/01/993 07:00:00
679 02/01/993 01:00:00
680 02/01/993 02:00:00
....
443 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
59 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.12.

OPERADORES LGICOS (AND / OR)

Listar o nome dos passageiros nascidos no ano de 1976 e que sejam do sexo
feminino.
SELECT
FROM
WHERE
AND

NM_PSGR
ITR_PSGR
TO_CHAR(DT_NASC_PSGR,'YY') = '76'
IC_SEXO_PSGR = 'F';

NM_PSGR
-----------------------------------------------------------------LUZINETE RAIMUNDA DOS REIS
ROSEMEIRY DE CARVALHO
ANGELA MARIA DE ALMEIDA
MAGNA MARIA GONCALVES DE SOUZA
....
7 rows selected.
Listar as rotas que partiram ou chegaram do aeroporto do Galeo (cdigo
GIG) no Rio de Janeiro.
SELECT
FROM
WHERE
OR

*
ITR_ROTA_VOO
CD_ARPT_ORIG = 'GIG'
CD_ARPT_DEST = 'GIG';

NR_ROTA_VOO CD_
----------- --61 GIG
62 GIG
63 GIG
64 GIG
65 GIG
66 GIG
.....
194 rows selected.

CD_ VR_PASG
--- ------AEP
1250
AKL
270
AMM
500
AMS
AOL
350
ASU
670

Listar as rotas que saram do Galeo (GIG) com destino ao aeroporto de


New York (NYC) ou saram do Galeo com a passagem custando at US$300,00,
ou ainda as rotas cujo preo da passagem no determinado, no
importando a origem e o destino.
SELECT
FROM
WHERE
OR
OR

*
ITR_ROTA_VOO
(CD_ARPT_ORIG = 'GIG' AND CD_ARPT_DEST = 'NYC')
(CD_ARPT_ORIG = 'GIG' AND VR_PASG <= 300.00)
VR_PASG IS NULL;

NR_ROTA_VOO CD_
----------- ---62 GIG
68 GIG
78 GIG
82 GIG
....
65 rows selected.

CD_
---AKL
BAQ
CCS
CPC

VR_PASG
------270
290

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
60 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.13.

CONSTANTES

Listar a data e a hora de sada dos vos da aeronave cdigo "TTINI".


Considerar os textos DIA: e HORA: antes das respectivas colunas.
SELECT 'DIA:',
SUBSTR(TO_CHAR(DT_SAIDA_VOO,'DD/MM/YYYY'),1,10),
'HORA:',
SUBSTR(TO_CHAR(DT_SAIDA_VOO,'HH24:MI:SS'),1,8)
FROM ITR_VOO
WHERE CD_ARNV = 'TTINI';
'DIA
---DIA:
DIA:
DIA:

SUBSTR(TO_
---------04/01/1993
16/01/1993
03/01/1993

'HORA
----HORA:
HORA:
HORA:

SUBSTR(T
-------02:00:00
18:00:00
05:00:00

3 rows selected.

6.14.

CONCATENAO (|| ou CONCAT)

Selecionar o nome e o sexo, por extenso, dos passageiros com cdigos na


faixa de 404 a 410.
ORACLE
SELECT NM_PSGR, IC_SEXO_PSGR || 'ASCULINO'
FROM ITR_PSGR
WHERE CD_PSGR BETWEEN 404 AND 410;
MYSQL
SELECT NM_PSGR, CONCAT(IC_SEXO_PSGR,'ASCULINO')
FROM ITR_PSGR
WHERE CD_PSGR BETWEEN 404 AND 410;
NM_PSGR
--------------------------------------------JOSE MARIA ALVES GARCIA
WILSON VASCONCELOS DE SOUZA
GERALDO AFONSO ALVIM
TEREZINHA MARIA T. REBOUCAS
IVANIA MARIA ANDRADE CESARINI
ANGELA BEATRIZ NAZARENO
JORGE EUSTAQUIO HEREDIA

IC_SEXO_PSGR
----------------------MASCULINO
MASCULINO
MASCULINO
FASCULINO
FASCULINO
FASCULINO
MASCULINO

7 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
61 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.15.

AGRUPAMENTO DE LINHAS (GROUP BY)

Utilizado para agrupar linhas para a execuo das funes.


Selecionar a quantidade de reservas de cada passageiro.
SELECT CD_PSGR, COUNT(*)
FROM ITR_RESV
GROUP BY CD_PSGR;
CD_P
---1
3
4
5
6

COUNT(*)
-------2
2
1
2
2
....
1594 rows selected.
Listar a capacidade de transporte de passageiros por tipo de equipamento
e por quantidade de motores.
SELECT DC_TIPO_EQPT, QT_MOTOR, SUM(QT_PSGR)
FROM ITR_EQPT
GROUP BY DC_TIPO_EQPT, QT_MOTOR;
DC_TIPO_EQPT
------------HELICOPTERO
JATO
JATO
JATO
TURBO HELICE
TURBO HELICE

QT_MOTOR
-------8
2
3
4
2
4

SUM(QT_PSGR)
-----------2385
1215
3004
485
130

6 rows selected.
Selecionar os aeroportos de origem e o preo da passagem mais barato de
cada um deles.
SELECT CD_ARPT_ORIG, MIN(VR_PASG)
FROM ITR_ROTA_VOO
GROUP BY CD_ARPT_ORIG;
CD_ MIN(VR_PASG)
--- -----------AEP
AKL
AMM
940
AMS
1050
AOL
1010
ASU
1060
....
98 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
62 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Determinar o total de passageiros que podem ser transportados por cada


tipo de equipamento
SELECT DC_TIPO_EQPT, SUM(QT_PSGR)
FROM ITR_EQPT
GROUP BY DC_TIPO_EQPT ;
DC_TIPO_EQPT
-----------HELICOPTERO
TURBO HELICE
JATO

SUM(QT_PSGR)
----------8
615
6604

3 rows selected.

6.16.

RESTRIO NO AGRUPAMENTO (HAVING)

Utilizado para selecionar linhas aps a execuo de uma funo de


agrupamento.
Listar o total de passageiros que podem ser transportados por cada tipo
de equipamento; mas s interessam aqueles tipos que transportem mais de
100 passageiros.
SELECT
FROM
GROUP BY
HAVING

DC_TIPO_EQPT, SUM(QT_PSGR)
ITR_EQPT
DC_TIPO_EQPT
SUM(QT_PSGR) > 100;

DC_TIPO_EQPT SUM(QT_PSGR)
------------ -----------JATO
6604
TURBO HELICE
615
2 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
63 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.17.

CLASSIFICAO DAS LINHAS (ORDER BY)

Listar os pases cadastrados classificados por nome.


SELECT *
FROM ITR_PAIS
ORDER BY NM_PAIS;
CD
--DE
AO
AN
AR
AU
AT
BB

NM_PAIS
QT_PPLC_PAIS
-------------------------------------- -----------ALEMANHA
79112800
ANGOLA
9677000
ANTILHAS HOLANDESAS
ARGENTINA
31928519
AUSTRALIA
16806700
AUSTRIA
7617779
BARBADOS
256000
....
61 rows selected.

Relacionar a data de sada, o cdigo do passageiro e o percentual de


desconto das reservas, classificando em ordem de data ascendente e
passageiro descendente.
SELECT DT_SAIDA_VOO, CD_PSGR, PC_DESC_PASG
FROM ITR_RESV
ORDER BY 1 ASC, 2 DESC;
DT_SAIDA_ CD_PSGR PC_DESC_PASG
--------- ------- -----------01-JAN-93
1486
0
01-JAN-93
1416
0
01-JAN-93
1259
0
01-JAN-93
1251
0
01-JAN-93
1214
0
....
4267 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
64 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.18.

MANIPULAO RELACIONAL DOS DADOS

6.18.1.

JUNO DE TABELAS (JOIN)

Operao executada em mais de uma tabela para responder uma query.


Um join entre tabelas sem predicados torna-se um produto cartesiano, ou
seja, uma combinao de cada linha de uma tabela com cada linha da outra
tabela.
Outer Join: uma extenso de DML da Oracle para combinar linhas de
tabelas, mesmo que no exista valor de igualdade.
Listar os nmeros das rotas e os cdigos dos aeroportos de origem com os
nomes de suas cidades.
SELECT NR_ROTA_VOO
,CD_ARPT_ORIG
,NM_CIDD
FROM ITR_ROTA_VOO
,ITR_ARPT
WHERE CD_ARPT_ORIG = CD_ARPT;
NR_RO
----61
62
63
64
65
66
67

CD_ NM_CIDD
--- --------------------------------GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
GIG RIO DE JANEIRO
....
424 rows selected.

Para que o JOIN seja executado, uma clausula WHERE precisa estar
especificada e definir a ligao entre as tabelas envolvidas.
Os atributos de ligao no precisam necessariamente estar contidos na
clausula SELECT.
Quando as colunas de ligao tiverem o mesmo nome temos que
referenciar as tabelas envolvidas.
recomendvel, para maior clareza da query, que quando referenciamos
as tabelas, todas as colunas destas tabelas sejam tambm referenciadas e no s
as que tiverem o mesmo nome.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
65 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Quais so os cdigos
respectivas companhias?

das

aeronaves

cadastradas

nome

de

suas

SELECT CD_ARNV
,NM_CMPN_AEREA
FROM ITR_ARNV
,ITR_CMPN_AEREA
WHERE ITR_CMPN_AEREA.CD_CMPN_AEREA = ITR_ARNV.CD_CMPN_AEREA;
CD_AR
----TTRIN
TTRIO
TTRIQ
TTRIS

NM_CMPN_AEREA
-------------------------------------AMERICAN AIRLINES
AMERICAN AIRLINES
AMERICAN AIRLINES
AMERICAN AIRLINES
....
420 rows selected.
Listar o nome dos passageiros em ordem alfabtica e os descontos que eles
tiveram nas suas reservas.
SELECT NM_PSGR
,PC_DESC_PASG
FROM ITR_PSGR P
,ITR_RESV R
WHERE R.CD_PSGR = P.CD_PSGR
ORDER BY NM_PSGR;
NM_PSGR
---------------------------------------ACACIO RIBEIRO DOS SANTOS
ACACIO RIBEIRO DOS SANTOS
ACACIO RIBEIRO DOS SANTOS
ACACIO RIBEIRO DOS SANTOS
ADAIR EFREN DA SILVA
....
4267 rows selected.

PC_DESC_PASG
-----------0
1
5
1
2

Quais so os nomes de equipamentos que cada companhia tem ?


SELECT NM_CMPN_AEREA
,NM_EQPT
FROM ITR_ARNV A
,ITR_CMPN_AEREA CA
,ITR_EQPT E
WHERE CA.CD_CMPN_AEREA = A.CD_CMPN_AEREA
AND E.CD_EQPT = E.CD_EQPT;
NM_CMPN_AEREA
----------------AMERICAN AIRLINES
AMERICAN AIRLINES
AMERICAN AIRLINES
AMERICAN AIRLINES
AMERICAN AIRLINES
....
420 rows selected.

NM_EQPT
------------------BOEING 767-200
BOEING 767-300
BOEING 757
BOEING 747-200(PAX)
BOEING 747-400(PAX)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
66 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Quais so as cidades de onde saem os vos cadastrados, e quais so as


companhias que os atendem?
SELECT NM_CIDD
,NM_CMPN_AEREA
FROM ITR_VOO
,ITR_ROTA_VOO
,ITR_ARPT
,ITR_ARNV
,ITR_CMPN_AEREA
WHERE ITR_ROTA_VOO.NR_ROTA_VOO
AND ITR_ARPT.CD_ARPT
AND ITR_VOO.CD_ARNV
AND ITR_CMPN_AEREA.CD_CMPN_AEREA
NM_CIDD
--------------------RIO DE JANEIRO
BARRANQUILA
RIO DE JANEIRO
....
2231 rows selected.

=
=
=
=

ITR_VOO.NR_ROTA_VOO
ITR_ROTA_VOO.CD_ARPT_ORIG
ITR_ARNV.CD_ARNV
ITR_ARNV.CD_CMPN_AEREA;

NM_CMPN_AEREA
----------------------------------AMERICAN AIRLINES
SURINAN AIRWAYS
LLOYD BOLIVIANO

Para as aeronaves do tipo jato e que so de companhias de pases com mais


de 1 milho de habitantes, listar o nome do equipamento e o nome de sua
companhia.
SELECT NM_EQPT
,NM_CMPN_AEREA
FROM ITR_ARNV A
,ITR_EQPT E
,ITR_CMPN_AEREA C
,ITR_PAIS P
WHERE E.DC_TIPO_EQPT
AND P.QT_PPLC_PAIS
AND E.CD_EQPT
AND C.CD_CMPN_AEREA
AND P.CD_PAIS

LIKE '%JATO%'
> 1000000
= A.CD_EQPT
= A.CD_CMPN_AEREA
= C.CD_PAIS;

NM_EQPT
NM_CMPN_AEREA
---------------- ----------------------------------BOEING 767-200
AMERICAN AIRLINES
BOEING 767-300
AMERICAN AIRLINES
BOEING 757
AMERICAN AIRLINES
....
350 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
67 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.18.2.

AUTO-JUNO

Podemos referenciar a mesma tabela mais de uma vez.


Listar os nomes dos passageiros e os seus responsveis.
SELECT P.NM_PSGR
,R.NM_PSGR RESPONSVEL
FROM ITR_PSGR P
,ITR_PSGR R
WHERE R.CD_PSGR = P.CD_PSGR_RESP;
NM_PSGR
-------------------------------JULIO CESAR A. BARROSO
MAURICIO LEONARDO SILVA
JOSE FRANCISCO DE OLIVEIRA
ANTONIO DONALDO DE PADUA
....
431 rows selected.

6.18.3.

RESPONSVEL
-------------------------------------PAULO ROBERTO DE FARIA
VALDIR CORREA DUARTE
GLORIA MARIA DO NASCIMENTO
FLAVIO DE ASSUMPCAO

PRODUTO ENTRE TABELAS (PRODUCT)

Quando no especificamos as colunas de ligao, as linhas das tabelas


envolvidas sero combinadas entre si gerando resultados imprevisveis.
Listar todas as rotas possveis de serem realizadas com os aeroportos
cadastrados.
SELECT A.CD_ARPT
,B.CD_ARPT
FROM ITR_ARPT A
,ITR_ARPT B
WHERE A.CD_ARPT <> B.CD_ARPT;
CD_ CD_
---- ---CNF PLU
SRZ PLU
VVI PLU
AAX PLU
....
90300 rows selected.

CUIDADO !!!

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
68 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.18.4.

UNIO DE TABELAS (UNION)

Usado para unir o resultado de duas ou mais queries. A tabela resultado


no contm linhas duplicadas, exceto se especificar UNION ALL.
Que pases possuem companhias areas ou passageiros?
SELECT NM_PAIS
FROM ITR_CMPN_AEREA CA
,ITR_PAIS P
WHERE P.CD_PAIS = CA.CD_PAIS
UNION
SELECT NM_PAIS
FROM ITR_PSGR PS
,ITR_PAIS PA
WHERE PA.CD_PAIS = PS.CD_PAIS;
NM_PAIS
----------------------------ESTADOS UNIDOS
MEXICO
FRANCA
....
39 rows selected.
Listar
cdigo
ORACLE
SELECT
FROM
WHERE
AND
UNION
SELECT
FROM
WHERE
AND
MYSQL
SELECT
FROM
WHERE
AND
UNION
SELECT
FROM
WHERE
AND

o nome e o sexo, por extenso, dos passageiros cadastrados de


entre 404 e 410.
NM_PSGR, IC_SEXO_PSGR || 'ASCULINO')
ITR_PSGR
CD_PSGR BETWEEN 404 AND 410
IC_SEXO_PSGR = 'M'
NM_PSGR, IC_SEXO_PSGR || 'EMININO'
ITR_PSGR
CD_PSGR BETWEEN 404 AND 410
IC_SEXO_PSGR = 'F';
NM_PSGR, CONCAT(IC_SEXO_PSGR,'ASCULINO')
ITR_PSGR
CD_PSGR BETWEEN 404 AND 410
IC_SEXO_PSGR = 'M'
NM_PSGR, CONCAT(IC_SEXO_PSGR,'EMININO')
ITR_PSGR
CD_PSGR BETWEEN 404 AND 410
IC_SEXO_PSGR = 'F';

NM_PSGR
---------------------------------ANGELA BEATRIZ NAZARENO
GERALDO AFONSO ALVIM
IVANIA MARIA ANDRADE CESARINI
JORGE EUSTAQUIO HEREDIA
....
7 rows selected.

IC_SEXO_PSGR
----------------------FEMININO
MASCULINO
FEMININO
MASCULINO

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
69 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Listar os nomes de todos


responsveis, quando existir.

os

passageiros

de

seus

respectivos

SELECT P.NM_PSGR PSGR


,PR.NM_PSGR RESPONSAVEL
FROM ITR_PSGR PR
,ITR_PSGR P
WHERE P.CD_PSGR = PR.CD_PSGR_RESP
UNION
SELECT NM_PSGR
,''
FROM ITR_PSGR
WHERE CD_PSGR_RESP IS NULL;
PSGR
------------------------------------ACACIO RIBEIRO DOS SANTOS
ADAIR EFREN DA SILVA
ADAIR MARQUES DA SILVA
ADALTON BATALHA
ADALTON DA SILVA RAMOS
....
1604 rows selected.

RESPONSAVEL
----------------------------------

LUIZ GONZAGA DE CAMPOS

Listar os nomes de todos os passageiros


responsveis, quando existir (usar OUTER JOIN).

de

seus

respectivos

ORACLE
SELECT P.NM_PSGR PSGR
,PR.NM_PSGR RESPONSAVEL
FROM ITR_PSGR P
,ITR_PSGR PR
WHERE PR.CD_PSGR(+) = P.CD_PSGR_RESP ;
MYSQL
SELECT P.NM_PSGR PSGR
,PR.NM_PSGR RESPONSAVEL
FROM ITR_PSGR P
LEFT OUTER JOIN ITR_PSGR PR ON PR.CD_PSGR = P.CD_PSGR_RESP ;
PSGR
RESPONSAVEL
--------------------------------------- -----------------------------JOSE CONCESSO DE ANDRADE
JOAO CARLOS SILVEIRA
LUIZ GONZAGA GUEDES
LUIZ DA COSTA LAGE
WALMIR ALVARENGA RIBEIRO
ANTONIO MARTINS PEREIRA
....
1614 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
70 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Quais os cdigos de passageiros brasileiros e


tiveram desconto na reserva?

solteiros,

ou que

no

Quais os cdigos de passageiros brasileiros e solteiros,


tiveram desconto na reserva ? (outras formas de resoluo)

ou que

no

SELECT CD_PSGR
FROM ITR_PSGR
WHERE CD_PAIS = 'BR'
AND IC_ESTD_CIVIL = 'S'
UNION
SELECT P.CD_PSGR
FROM ITR_PSGR P
,ITR_RESV R
WHERE R.CD_PSGR
= P.CD_PSGR
AND R.PC_DESC_PASG = 0;
CD_PSGR
------1
3
9
11
....
851 rows selected.

SELECT P.CD_PSGR
FROM ITR_PSGR P
,ITR_RESV R
WHERE R.CD_PSGR = P.CD_PSGR
AND ((P.CD_PAIS = 'BR' AND P.IC_ESTD_CIVIL = 'S')
OR R.PC_DESC_PASG = 0)
GROUP BY P.CD_PSGR;
SELECT DISTINCT(P.CD_PSGR)
FROM ITR_PSGR P
,ITR_RESV R
WHERE R.CD_PSGR = P.CD_PSGR
AND ((P.CD_PAIS = 'BR' AND P.IC_ESTD_CIVIL = 'S')
OR R.PC_DESC_PASG = 0);
Quais so os vos que atenderam a rota 101 ou que foram reservados com
desconto de 10 %? Listar em ordem crescente.
SELECT
FROM
WHERE
UNION
SELECT
FROM
WHERE
ORDER BY

NR_VOO
ITR_VOO
NR_ROTA_VOO = 101
NR_VOO
ITR_RESV
PC_DESC_PASG = 10
1;

NR_VOO
-------------31
33
....
26 rows selected.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
71 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.19.

SUBQUERY

uma declarao SELECT embutida na clusula WHERE ou HAVING de


uma outra query.
Em qualquer query com subqueries, estas subqueries so executadas
primeiro e os seus resultados ento so utilizados pela query mais externa.
Quais os cdigos de passageiros que tiveram desconto maior do que a mdia
dos descontos de todos os passageiros?
SELECT DISTINCT CD_PSGR
FROM ITR_RESV
WHERE PC_DESC_PASG > (SELECT AVG(PC_DESC_PASG)
FROM ITR_RESV);
CD_PSGR
--------------1
5
6
7
8
....
923 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
72 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.20.

INTERSEO DE TABELAS

Caso de subqueries com mais de uma linha de resultado.


Quais so os vos das reservas dos passageiros que nasceram em pases que
tenham mais de 200 milhes de habitantes
SELECT NR_VOO
FROM ITR_RESV
WHERE CD_PSGR IN (SELECT CD_PSGR
FROM ITR_PSGR
WHERE CD_PAIS IN (SELECT CD_PAIS
FROM ITR_PAIS
WHERE QT_PPLC_PAIS > 200000000));
NR_VOO
-----645
645
850
850
850
....
460 rows selected.
Outra soluo:
SELECT NR_VOO
FROM ITR_RESV RS
,ITR_PSGR PS
,ITR_PAIS PA
WHERE PS.CD_PSGR
= RS.CD_PSGR
AND PA.CD_PAIS
= PS.CD_PAIS
AND PA.QT_PPLC_PAIS > 200000000;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
73 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.21.

TESTE DE EXISTNCIA (EXISTS)

Em uma subquery com EXISTS, a primeira query s executa se a segunda


devolver uma resposta verdadeira. Se existirem linhas no resultado da subquery, o
valor ser VERDADEIRO; caso contrrio, ser FALSO.
Relacionar os nomes dos passageiros que esto com reservas para o vo
145, mas somente se neste vo ningum teve desconto.
SELECT NM_PSGR
FROM ITR_PSGR P
,ITR_RESV R
WHERE R.CD_PSGR = P.CD_PSGR
AND R.NR_VOO = 145
AND EXISTS (SELECT *
FROM ITR_RESV
WHERE NR_VOO = 145
AND PC_DESC_PASG = 0);
NM_PSGR
------------------------------------------------------EROS FROES
MARCOS OTTONI DE CARVALHO
JOSE GERALDO DE OLIVEIRA
FRANCISCO RODRIGUES FARIA
SERGIO GERALDO M. DE FARIA
JOAO BATISTA DE ANDRADE
MANOEL JUSTINIANO DOS SANTOS
JOAO CARLOS DE ARAUJO
REGINALDO PASQUALON
9 rows selected.
Quais os nomes dos passageiros que fizeram reserva para o dia 01 de
janeiro de 93?
SELECT NM_PSGR
FROM ITR_PSGR P
WHERE EXISTS (SELECT
FROM
WHERE
AND

CD_PSGR
ITR_RESV R
DT_SAIDA_VOO = '1993-01-01'
R.CD_PSGR
= P.CD_PSGR );

NM_PSGR
-----------------------------------------------------------WALLACE DE ALEXANDRIA MARQUES
MARCOS ANTONIO UMBELINO
JOSE AFONSO CARBOGIM BASSOLI
TARCISIO GOMES DE OLIVEIRA
....
381 rows selected.

A subquery anterior do tipo especial, conhecida por subquery correlata,


pois para cada passageiro encontrado na primeira query, ser pesquisada na
segunda query. Desta forma, o resultado de uma, provoca a execuo da outra.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
74 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Relacionar os nomes dos passageiros que esto com reservas para os vos
onde ningum obteve desconto.
SELECT DISTINCT PS.NM_PSGR
FROM ITR_PSGR PS
,ITR_RESV RS
WHERE PS.CD_PSGR = RS.CD_PSGR
AND NOT EXISTS (SELECT *
FROM ITR_RESV R
WHERE R.NR_VOO = RS.NR_VOO
AND R.PC_DESC_PASG > 0);
NM_PSGR
----------------------------------------------ACACIO RIBEIRO DOS SANTOS
ADALTON DA SILVA RAMOS
ADALTON ROTONDO ROCHA
ADASIO APARECIDO DOS SANTOS
....
686 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
75 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.22.

DIFERENA ENTRE TABELAS (NOT IN)


uma subquery com utilizao do NOT IN

Quais so os nomes dos passageiros que nunca fizeram reserva para Nova
York (JFK)?
SELECT NM_PSGR
FROM ITR_PSGR
WHERE CD_PSGR NOT IN (SELECT R.CD_PSGR
FROM ITR_RESV
R
,ITR_VOO
VO
,ITR_ROTA_VOO RV
WHERE RV.CD_ARPT_DEST = 'JFK'
AND RV.NR_ROTA_VOO = VO.NR_ROTA_VOO
AND VO.NR_VOO
= R.NR_VOO);
NM_PSGR
-----------------------------------------------JOSE CONCESSO DE ANDRADE
JOAO CARLOS SILVEIRA
LUIZ DA COSTA LAGE
WALMIR ALVARENGA RIBEIRO
DIMAS FELISMINO
MIGUEL DE PAIVA
....
1604 rows selected.
Quais so os nomes de passageiros que nunca fizeram reserva?
SELECT NM_PSGR
FROM ITR_PSGR
WHERE CD_PSGR NOT IN (SELECT CD_PSGR
FROM ITR_RESV);
NM_PSGR
------------------------------------------------------JOAO CARLOS SILVEIRA
JOSE AFONSO CENACHI DRUMOND
DEMETRIO MACHADO DA COSTA
EUCELIO FELICIANO TORRES
LIBANO JORGE ABJAUD
RONALDO CASTRO MACIEL
....
20 rows selected.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
76 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

6.23.

EXERCCIOS PROPOSTOS

01) QUAIS OS VOS QUE S FORAM EXECUTADOS POR UM S CDIGO


DE EQUIPAMENTO?
02) QUAIS OS VOS QUE S FORAM EXECUTADOS POR UM S CDIGO
DE EQUIPAMENTO, E O FIZERAM MAIS DE UMA VEZ? LISTAR TAMBM A
QUANTIDADE DE VOS REALIZADOS.
03) EM QUE
RESPONSVEL?

VO

QUAL

PASSAGEIRO

VIAJOU

COM

SEU

04) LISTAR O TOTAL DE DESCONTOS (EM US$) QUE CADA PASSAGEIRO


TEVE, EM ORDEM DECRESCENTE POR TOTAL.
05) QUAIS SO AS COMPANHIAS USADAS PELOS PASSAGEIROS QUE TEM
NO MNIMO 60 ANOS?
06) QUAIS AS COMPANHIAS QUE TRANSPORTAM MENOS PASSAGEIROS
QUE A MDIA?
07) DESCOBRIR SE A COMPANHIA DE NOME 'TAAG' NO TEM AERONAVE.
SE NO TIVER, DETERMINAR QUAIS AS COMPANHIAS USADAS PELOS
SEUS COMPATRIOTAS NOS 5 PRIMEIROS DIAS DE JANEIRO DE 93. SE
TIVER, NAO LISTAR NADA!
08) QUANTAS ROTAS COM ORIGEM NO BRASIL CADA PAIS RECEBE?
09) QUANTAS VIAGENS CADA PASSAGEIRO FEZ AO SEU PAIS DE ORIGEM
NOS dois PRIMEIROS DIAS DE 1993?
10) QUAL PASSAGEIRO NUNCA VIAJOU AO SEU PAIS DE ORIGEM USANDO
AVIES TURBO HELICE?
11) QUAIS SO AS AERONAVES DE CADA COMPANHIAS? E CADA UMA
DELAS DE QUE TIPO ?
12) QUAL O NMERO DE RESERVAS COM DESCONTO MAIOR QUE 10 %
CADA COMPANHIA TEM, SEPARANDO POR PAIS DE ORIGEM DOS
CLIENTES? INDICAR TAMBM O PAS DA COMPANHIA.
13) QUAIS AS COMPANHIAS TIVERAM FATURAMENTO MAIOR QUE A MDIA
DAS OUTRAS COMPANHIAS? CONSIDERAR SOMENTE OS VOS DOS
PRIMEIROS 10 DIAS DE JANEIRO DE 93.
14) QUAIS AS ROTAS QUE ATENDEM AO ESTADO BRASILEIRO QUE TEM
MENOS AEROPORTOS?
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
77 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15) QUAL A CAPACIDADE DE TRANSPORTE DE CADA COMPANHIA?


16) QUANTOS RESPONSVEIS TEM MAIS DE UM DEPENDENTE?
17) QUANTOS VOS CADA AERONAVE DE COMPANHIAS AMERICANAS FEZ
AO RIO DE JANEIRO?
18) QUANDO E ATENDENDO A QUAL TRAJETO, VOOU A AERONAVE DE
MAIOR CAPACIDADE DA AIR FRANCE?
19) QUANTOS VOS CADA COMPANHIA TEM PARA NEW YORK, RIO DE
JANEIRO E AMSTERDAM? (RELACIONAR NA MESMA LINHA O NOME DA
COMPANHIA, E AS 3 QUANTIDADES, MESMO QUE SEJA ZERO).
20) SELECIONAR AS COLUNAS SUFICIENTES PARA EMITIR OS BILHETES
DE PASSAGENS PARA OS CLIENTES QUE VIAJARO NOS DIAS 01 E 02 DE
JANEIRO DE 1993.
SOUTH AFRICAN
PASSAGEIRO: SERGIO RICARDO DE SOUZA
DATA: 02.01.1993 / 00:00
VO: 584 - CHICAGO / WASHINGTON
TAR. BASE: US$ 1250,00
DESC: US$ 137,50
A PAGAR: US$ 1112,50
21) QUAIS AS CIDADES QUE TM MAIS DE DOIS AEROPORTOS?
22) QUAIS SO OS CLIENTES QUE J VIAJARAM EM MAIS DE 6
COMPANHIAS ?
23) LISTAR AS ROTAS QUE TM CONTRAPARTIDA DOS AEROPORTOS,
ISTO , ROTA DE x PARA y E DE y PARA x.
24) EM QUE DIA SAIU MAIS VOS DO RIO DE JANEIRO?
25) LISTAR AS AERONAVES E A CAPACIDADE DE PASSAGEIROS EM
ORDEM DECRESCRENTE DE CAPACIDADE.
26) QUAIS AS COMPANHIAS QUE NO TM VOS PARA NEW YORK E
NUNCA ANTENDERAM A PASSAGEIROS JAPONESES?
27) QUANTAS ROTAS COM DESTINO NO BRASIL CADA PAIS ENVIA?
28) QUAIS OS CDIGOS DE PASSAGEIROS COM MAIS HOMNIMOS?

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
78 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

ALTERAO
E
REMOO
DE
DADOS

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
79 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

7. Alterando dados em uma tabela


Para alterar linhas em uma tabela, utilizamos a instruo UPDATE.
Sintaxe: UPDATE tabela
SET coluna = valor [, coluna = valor, ...]
[ WHERE condio];
Onde:

tabela o nome da tabela


coluna o nome da coluna a ser atualizada
valor o valor correspondente ou subconsulta para a coluna
condio identifica as linhas a serem atualizadas (composta
de nomes de colunas, expresses, constantes e/ou
operadores de comparao)

Exemplos:

UPDATE ITR_VOO
SET DT_SAIDA_VOO = DT_SAIDA_VOO + 365
WHERE DT_SAIDA_VOO > 01/01/2005

Para atualizar uma nica linha em geral utiliza-se a chave primria para
identificar esta nica linha. Ao utilizar outras colunas (diferentes da chave
primria), vrias linhas podero ser atualizadas inesperadamente (por ex,
nome ao invs de cdigo).
Se a clusula WHERE for omitida, todas as linhas da tabela sero atualizadas.
Atualizar com subconsulta de vrias colunas tambm possvel. Veja o
exemplo a seguir:
Sintaxe:

UPDATE tabela1
SET (coluna1, coluna2, ...) =
(SELECT coluna 1, coluna 2, ...
FROM tabela2
WHERE condio)
WHERE condio

Exemplo:
Atualizando dados do empregado 8888 com informaes do empregado 7777
UPDATE emp
SET (dc_cargo, nr_dept) =
(SELECT dc_cargo, nr_dept
FROM emp
WHERE nr_emp = 7777)
WHERE nr_emp = 8888

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
80 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

As instrues de atualizao de dados devem obedecer s regras de


integridade (conjunto pr-definido de regras), ou seja, ao se tentar atualizar
uma tabela filha com dados de uma me que no existe, ocorrer um erro.
Exerccios:

Alterar o preo das passagens com acrscimo de 10 % para as rotas que


ainda no tenham reservas registradas.
UPDATE ITR_ROTA_VOO
SET VR_PASG = VR_PASG * 1.1
WHERE NR_ROTA_VOO NOT IN (SELECT A.NR_ROTA_VOO
FROM ITR_VOO
A
,ITR_RESV B
WHERE B.NR_VOO = A.NR_VOO
AND B.DT_SAIDA_VOO = A.DT_SAIDA_VOO);
194 rows updated.
Dar um desconto de 10 % para todos os passageiros de sobrenome SILVA.
UPDATE ITR_RESV
SET PC_DESC_PASG = 10
WHERE CD_PSGR IN (SELECT CD_PSGR
FROM ITR_PSGR
WHERE NM_PSGR LIKE '%SILVA%');
498 rows updated.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
81 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

8. Removendo linhas de uma tabela


Podemos remover linhas existentes de uma tabela usando a instruo DELETE.
Sintaxe:

DELETE [FROM] tabela


[WHERE condio]

Onde:

tabela o nome da tabela


condio identifica as linhas a serem removidas (composta
de nomes de colunas, expresses, constantes e/ou
operadores de comparao)

Quando a clusula WHERE especificada linhas especficas so removidas.


Quando a clusula WHERE no especificada todas as linhas da tabela sero
removidas.
Esta instruo, apesar de apagar as linhas especificadas, NO libera para o
SGBD o espao ocupado por essas linhas. Veja alternativa na instruo
TRUNCATE.
Removendo linhas baseadas em outra tabela: Utilize uma subconsulta para
realizar esta operao.
Exemplo:

DELETE FROM empregado


WHERE nr_depto = (
SELECT nr_depto
FROM depto
WHERE nm_depto = VENDAS )

As instrues de remoo de dados tambm devem obedecer s regras de


integridade (conjunto pr-definido de regras), ou seja, ao se tentar apagar uma
linha de tabela pai referenciada por uma linha de uma tabela filha, ocorrer um
erro.
Exerccios:
Excluir as reservas para o vo 104
DELETE FROM ITR_RESV
WHERE NR_VOO = 104;
9 rows deleted.

Caso no seja usada a clausula WHERE, todas as linhas so removidas.


DELETE FROM ITR_RESV;
4267 rows deleted.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
82 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

TRANSAES

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
83 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

9. Transaes de Banco de Dados


A consistncia de dados num SGBD garantida atravs de transaes, que do
mais flexibilidade e controle no caso de falhas do usurio ou do sistema. Quando
uma srie de instrues SQL precisa ser processada conjuntamente elas devem
falhar ou ter xito JUNTAS (por exemplo, numa transferncia de fundos entre
contas, o crdito no deve ser processado sem o dbito correspondente).
Tipos de transao
DML (Data Manipulation Language) consiste de qualquer nmero de
instrues DML tratadas como uma nica unidade lgica de trabalho)
DDL (Data Definition Language) consiste de apenas uma instruo DDL
DCL (Data Control Language) consiste de apenas uma instruo DCL
Uma transao comea quando for executada a primeira instruo DML
executvel.
A instruo COMMIT finaliza a transao atual
permanentes) todas as alteraes de dados pendentes.

efetivando

(tornando

A instruo ROLLBACK finaliza a transao atual descartando todas as


alteraes de dados pendentes.
A transao atual termina quando ocorrer uma das seguintes situaes:
Uma instruo COMMIT ou ROLLBACK for emitida
Uma instruo DDL (CREATE por exemplo) for emitida (COMMIT automtico)
Uma instruo DCL (GRANT por exemplo) for emitida (COMMIT automtico)
O usurio sair do aplicativo de acesso ao SGBD (COMMIT automtico)
Falha no computador (ROLLBACK automtico)
Sistema cair (ROLLBACK automtico)
Transao
INSERT

UPDATE

COMMIT

INSERT

DELETE
COMMIT

ROLLBACK
Depois que uma transao termina, a prxima instruo SQL executvel inicia
automaticamente a prxima transao.
Uma instruo DDL ou DCL automaticamente processada e, portanto, finaliza
implicitamente uma transao, mesmo que no seja executada com xito.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
84 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

9.1. ESTADO DOS DADOS ANTES DO FIM DA TRANSAO


Todas as alteraes feitas nos dados durante a transao so temporrias at
que a transao seja terminada.
As operaes de manipulao de dados (DML) afetam primeiramente uma rea
temporria (chamada de buffer ou segmentos de ROLLBACK). Desta forma tornase possvel recuperao do estado anterior dos dados (ROLLBACK).
O usurio que est processando as instrues enxerga as alteraes dos dados
processadas por ele mesmo numa transao, portanto, pode revisar os resultados
das operaes consultando as tabelas.
Os outros usurios s passaro a enxergar as alteraes feitas pelo usurio atual
quando este efetiv-las, ou seja, quando um COMMIT for processado. O SGDB
institui a consistncia na leitura para garantir que cada usurio veja os dados
como eram no ltimo COMMIT.
Quando uma instruo DML falhar durante a execuo, seu efeito ser desfeito
por um ROLLBACK no nvel da instruo. As alteraes feitas pelas instrues
DML anteriores no sero descartadas.
As linhas afetadas pelas alteraes so bloqueadas automaticamente, ou seja,
outros usurios no podero alterar dados nas linhas afetadas enquanto a
transao no terminar.

9.2. ESTADO DOS DADOS APS O FIM DA TRANSAO


Aps um COMMIT:
As alteraes nos dados so gravadas no banco de dados
O estado anterior dos dados perdido permanentemente
Todos os usurios podem enxergar os resultados das alteraes
As linhas afetadas so desbloqueadas e ficam disponveis para novas
alteraes
Aps um ROLLBACK:
As alteraes nos dados so desfeitas
O estado anterior dos dados restaurado
Todos os usurios podem continuar enxergando os dados como eram
As linhas afetadas so desbloqueadas e ficam disponveis para novas
alteraes

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
85 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

9.3. Exemplo de COMMIT e ROLLBACK


SQL> DELETE FROM teste;
25000 rows deleted.
SQL> ROLLBACK;
Rollback complete.
SQL> DELETE FROM teste WHERE id = 100;
1 row deleted.
SQL> SELECT * FROM teste WHERE id = 100;
No rows selected.
SQL> COMMIT;
Commit complete.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
86 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

CRIANDO
VISES
(VIEWS)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
87 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

10. Vises
So usadas para apresentar combinaes ou sub-conjuntos lgicos de dados
criando views de tabelas. uma tabela lgica baseada em uma tabela ou outra
view.
Uma view no contm dados prprios. como se fosse uma janela atravs da qual
os dados das tabelas podem ser vistos ou alterados. armazenada como uma
instruo SELECT no dicionrio de dados (catlogo).
As tabelas nas quais uma view se baseia so conhecidas como tabelas-base .
Usamos VIEWS para:
restringir o acesso aos dados  uma view seleciona colunas de uma tabela
facilitar consultas complexas  permitem que usurios quase leigos consultem
informaes de vrias tabelas sem conhecer uma instruo SQL de juno
apresentar diferentes vises dos mesmos dados  diferentes grupos de
usurios enxergam cada um os seus dados pertinentes
Existe uma classificao para VIEWS:
SIMPLES
o Cria dados a partir de apenas uma tabela
o No contm funes ou agrupamento de dados
o Permite executarmos uma DML atravs da view
COMPLEXAS
o Cria dados a partir de vrias tabelas
o Contm funes ou agrupamento de dados
o Nem sempre podemos executar uma DML atravs da view

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
88 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

10.1.

Criando VIEWS

Sintaxe:

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nome_view


AS sub-consulta
[WITH CHECK OPTION [CONSTRAINT restrio] ]
[WITH READ ONLY];

Onde:

REPLACE  recria a view se ela existir


FORCE  cria a view independentemente das tabelas-base
existirem ou no
NOFORCE  cria a view somente se as tabelas-base existirem
nome_view  o nome que se quer dar view
sub-consulta  uma instruo SELECT completa
WITH CHECK OPTION  especifica que somente linhas acessveis
view podem ser inseridas ou atualizadas
restrio  o nome atribudo restrio CHECK OPTION
WITH READ ONLY  assegura que as operaes DML no possam
ser executadas nesta view

Exemplos:

CREATE VIEW
AS
SELECT
FROM
WHERE

PSGR_28
NM_PSGR
ITR_PSGR
CD_PSGR = 28;

A sub-consulta que define uma VIEW pode conter quaisquer tipo de sintaxe,
incluindo junes, agrupamentos e sub-consultas.
A clusula ORDER BY deve ser usada apenas quando se recupera dados da VIEW
e no dentro da sub-consulta que define a VIEW.
Se o nome da restrio para uma view criada com CHECK OPTION no for
informado, o SGBD criar este nome baseado em sua maneira interna de
codificao de nomes.
Quando se acessa dados usando uma VIEW, o SGBD executa os seguintes
passos:
1. Recupera a definio da view no dicionrio de dados
2. Verifica os privilgios de acesso para as tabelas-base da view
3. Converte a consulta da view em uma operao equivalente nas tabelas-base
subjacentes, ou seja, os dados so recuperados ou uma atualizao feita nas
tabelas-base.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
89 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

10.2.

Criando VIEWS complexas

O exemplo abaixo cria uma VIEW complexa usando agrupamentos de dados:


DT_PSGR_POR_EQPT (TIPO, SOMA)
DC_TIPO_EQPT
, SUM(QT_PSGR)
FROM
ITR_EQPT
GROUP BY DC_TIPO_EQPT
HAVING
SUM(QT_PSGR) > 100;

CREATE VIEW
AS
SELECT

10.3.

Alterando VIEWS

O Oracle possui a opo OR REPLACE no comando de criao de uma view que


permite que uma view seja criada mesmo que j exista uma com esse nome,
substituindo assim, a verso antiga da view.
Desta forma a view poder ser alterada sem eliminar, recriar e reconceder os
privilgios de objeto.
No Interbase a alterao de uma view deve ser feita pela seqncia de DROP e
CREATE.
10.4.

Regras para executar operaes DML em uma VIEW

Podemos executar operaes DML em views SIMPLES (veja regras de


classificao anterior).
No poderemos remover (delete) ou modificar (update) ou adicionar (insert)
linhas de uma view se ela contiver:
Funes de grupo
Clusula GROUP BY
A palavra chave DISTINCT
A palavra chave ROWNUM
No poderemos modificar (update) dados de uma view se ela contiver:
Colunas definidas por expresses
No poderemos adicionar (insert) dados se a view contiver:
Colunas definidas por expresses
Colunas NOT NULL nas tabelas-base que no forem selecionadas pela view
Lembre-se de que as operaes DML so executadas nas tabelas-base
subjacentes.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
90 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

10.5.

Usando a clusula WITH CHECK OPTION

Podemos garantir que as operaes DML em uma view fiquem no domnio dela
usando a clusula WITH CHECK OPTION, que especifica que INSERTS e
UPDATES no tm permisso de tratar linhas que a view no possa selecionar.
Exemplo:
CREATE OR REPLACE VIEW arpt_mg_rj_sp
AS
SELECT CD_ARPT, NM_CIDD
FROM ITR_ARPT
WHERE SG_UF IN ('MG', 'RJ', 'SP')
WITH CHECK OPTION;
Na view arpt_mg_rj_sp acima, s podero ser inseridas ou alteradas as linhas dos
aeroportos dos estados de Minas Gerais, Rio de Janeiro e So Paulo
10.6.

Usando a clusula WITH READ ONLY

Para assegurar que nenhuma operao DML ocorra em uma view, basta usar a
clusula WITH READ ONLY.
Exemplo:

CREATE OR REPLACE VIEW arpt_mg_rj_sp


AS
SELECT CD_ARPT, NM_CIDD
FROM ITR_ARPT
WHERE SG_UF IN ('MG', 'RJ', 'SP')
WITH READ ONLY;

Quaisquer tentativa de inserir, alterar ou modificar dados desta view resultar em


erro retornado pelo SGBD.
10.7.

Removendo uma VIEW

Devemos usar a instruo DROP VIEW para remover uma view. Esta instruo
remove a definio da view no SGBD.
Esta eliminao no tem efeito algum nas tabelas-base da VIEW.
As VIEWS ou outras tabelas baseadas numa view deletada tornam-se invlidas.
Sintaxe:

DROP VIEW nome_view

Onde:

nome_view  o nome da view a ser apagada

Exemplo:

DROP VIEW arpt_mg_rj_sp

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
91 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

10.8.

VIEWS em Linha

uma subconsulta nomeada na clusula FROM da consulta principal. Uma view


em linha no um objeto do SGBD.
Exemplo:

SELECT
FROM

WHERE
AND
AND
AND

NM_CIDD
,NM_CMPN_AEREA
ITR_VOO
,ITR_ROTA_VOO
,(SELECT CD_ARPT
, NM_CIDD
FROM ITR_ARPT
WHERE SG_UF IN ('MG', 'RJ', 'SP')) ITR_ARPT
,ITR_ARNV
,ITR_CMPN_AEREA
ITR_ROTA_VOO.NR_ROTA_VOO =
ITR_VOO.NR_ROTA_VOO
ITR_ARPT.CD_ARPT =
ITR_ROTA_VOO.CD_ARPT_ORIG
ITR_VOO.CD_ARNV = ITR_ARNV.CD_ARNV
ITR_CMPN_AEREA.CD_CMPN_AEREA =
ITR_ARNV.CD_CMPN_AEREA ;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
92 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

CRIANDO
SEQUNCIAS

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
93 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

11. Seqncias
um objeto do banco de dados, criado pelo usurio, que pode ser compartilhado
por vrios usurios para gerar nmeros inteiros exclusivos.
As seqncias so comumente usadas para gerao automtica de valores de
chave primria.
A seqncia gerada e incrementada (ou diminuda) por uma rotina interna do
SGBD.
Os nmeros de seqncia so armazenados e gerados de modo independente das
tabelas, portanto, a mesma seqncia pode ser usada para vrias tabelas.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
94 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

11.1.

Criando Seqncias

Sintaxe:

CREATE SEQUENCE nome_sequencia


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Onde:

nome_sequencia  o nome do gerador de seqncia


INCREMENT BY  especifica de quanto ser o incremento da
seqncia.
Se nada for dito o incremento ser igual a 1 (um).
O nmero n deve ser um nmero inteiro podendo
ser negativo (caso de decremento).
START WITH  especifica o primeiro nmero da seqncia a ser
gerado. Se for omitido a seqncia comear em 1 (um).
MAXVALUE  especifica o valor mximo que a seqncia pode gerar
NOMAXVALUE  especifica um valor mximo muito grande
No Oracle por exemplo: 10^27.
MINVALUE  especifica o valor mnimo que a seqncia pode gerar
NOMINVALUE  especifica um valor mnimo muito pequeno
No Oracle por exemplo: -10^26
CYCLE | NOCYCLE  No caso de CYCLE, especifica que a
seqncia continue a gerar valores aps alcanar
seu valor mximo ou mnimo. No caso de
NOCYCLE que no gere valores adicionais
quando os valores mnimo e mximo forem
alcanados.
CACHE | NOCACHE  especifica quantos valores sero colocados
em memria CACHE previamente. No Oracle por
exemplo sero colocados 20 valores se nada for
dito.

Exemplo:

CREATE SEQUENCE dept_dept_nro


INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCLE;

No devemos usar a opo CYCLE se a seqncia for utilizada para gerar valores
de chave primria, a menos que exista uma rotina confivel que apague linhas
antigas mais rpido que o ciclo da seqncia.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
95 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

J que uma seqncia um objeto do banco de dados, podemos identific-la


atravs do dicionrio de dados USER_SEQUENCES. Podemos inclusive consultar
seus valores e definies atravs de um comando SQL comum. Por exemplo:
SELECT

FROM
11.2.

sequence_name
, min_value
, max_value
, increment_by
, last_number
user_sequences;

Pseudo Colunas NEXTVAL e CURRVAL

Aps criar as seqncias podemos us-las para gerar nmeros seqenciais atravs
das pseudocolunas NEXTVAL e CURRVAL.
A pseudocoluna NEXTVAL usada para retornar o prximo valor de seqncia
disponvel. Retorna um valor EXCLUSIVO sempre que feita uma referncia a ele,
at mesmo por usurios diferentes. Quando fazemos referncia ao NEXTVAL de
uma seqncia, 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. Portanto NEXTVAL deve ser
emitido antes que CURRVAL contenha um valor.
Por exemplo:
1. Vamos inserir um novo departamento chamado MARKETING em Porto
Alegre:
INSERT INTO
dept (dept_nro, dept_nome, local)
VALUES
(dept_dept_nro.NEXTVAL
, MARKETING
, PORTO ALEGRE);
2. Vamos visualizar o nmero do departamento que acabou de ser inserido na
tabela:
SELECT
dept_dept_nro.CURRVAL
FROM
DUAL;
3. Vamos agora admitir vrios funcionrios para o novo departamento. A
instruo INSERT a seguir poder ser executada repetidamente para todos
os funcionrios a serem admitidos:
INSERT INTO
emp ...
VALUES
(emp_nro.NEXTVAL
, dept_dept_nro.CURRVAL
, ...);

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
96 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Notem que as duas pseudocolunas NEXTVALL e CURRVAL devem ser


qualificadas com os nomes das respectivas seqncias a que se referem.
Os geradores de seqncia emitem nmeros de seqncia sem gaps (buracos),
porm existem pelo menos trs situaes em que isso pode acontecer:
1. Se fizermos um ROLLBACK de uma instruo que contenha uma seqncia;
2. Se ocorrer uma falha do sistema;
3. Se a seqncia for usada para vrias tabelas.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
97 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

NDICES

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
98 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

12. ndice
um objeto do SGBD que pode acelerar a recuperao de linhas fazendo uso de
um ponteiro.
Fornece acesso direto e rpido s linhas de uma tabela objetivando diminuir a
necessidade de movimentos de entrada e sada de dados (I/Os) atravs de um
caminho indexado.
Normalmente, aps sua criao, utilizado e mantido pelo prprio SGBD sem
necessidade de interveno do usurio.
So lgica e fisicamente independentes da tabela que indexam, o que significa que
podem ser criados e apagados a qualquer momento sem que haja efeito sobre as
tabelas-base ou outros ndices.
Quando eliminamos uma tabela os ndices nela baseados so automaticamente
apagados do catlogo.
So dois os tipos de ndice:
1. Exclusivos: No permite que duas linhas da tabela tenham valores
duplicados para o conjunto de colunas do ndice. Quando definimos que um
conjunto de colunas de uma tabela ter uma restrio do tipo PRIMARY KEY
ou UNIQUE KEY, o SGBD criar automaticamente um ndice exclusivo para
tal.
2. No-exclusivo: Permite que duas linhas da tabela tenham valores duplicados
para o conjunto de colunas do ndice. So usados para acelerar a
recuperao de linhas.

Sintaxe:

CREATE NDEX nome_ndice


ON tabela (coluna1 [, coluna2, ])

Onde:

nome_ndice  o nome do ndice


tabela  o nome da tabela a ser indexada
coluna1  o nome de uma das colunas da tabela
coluna2  o nome de uma das colunas da tabela

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
99 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

12.1.
Regras para se criar um ndice
Quando uma ou mais colunas forem freqentemente usadas na clusula
WHERE (seja em comparaes com constantes ou para juno de tabelas);
Quando a coluna tiver uma ampla faixa de valores;
Quando a coluna tiver um grande numero de linhas com valores nulos;
Quando se esperar que a maioria das consultas recupere menos de 4% das
linhas.
12.2.
Regras para se NO criar um ndice
Quando a tabela for pequena;
Quando a(s) coluna(s) NO for(em) freqentemente usada(s) na clusula
WHERE (seja em comparaes com constantes ou para juno de tabelas);
Quando a tabela for atualizada com freqncia (quanto mais ndices mais
lenta ficar a atualizao da tabela);
Quando a coluna tiver um grande nmero de linhas com valores nulos;
Quando se esperar que a maioria das consultas recupere mais de 4% das
linhas.
12.3.

Eliminando um ndice

Sintaxe: DROP INDEX nome_ndice


Onde: nome_ndice  o nome do ndice a ser eliminado.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
100 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

PROGRAMAS
(STORED
PROCEDURES)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
101 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13. PROGRAMAS (STORED PROCEDURES)


Dois dos mais populares SGBDs (Sistemas Gerenciadores de Banco de Dados) do
mercado atual, Oracle e SQL Server, implementam extenses linguagem SQL.
Essas extenses so verdadeiras linguagens de programao procedural como as
mais usadas atualmente (Visual Basic, Delphi, etc).
O Oracle implementou a linguagem PL/SQL e o SQL Server a TRANSACT-SQL, e
por meio dessas linguagens que podemos construir novos objetos dos bancos de
dados: procedimentos, funes e gatilhos (triggers).
A linguagem SQL no uma linguagem procedural, portanto no podemos dizer
como determinada tarefa deve ser executada. Com os procedimentos podemos
dizer ao banco de dados como deve ser realizada determinada funo.
O PL-SQL possui dois tipos de programas, procedimentos e funes, e existe uma
estrutura padro para eles.
Um procedimento um bloco nomeado que pode obter parmetros (algumas vezes
chamados de argumentos), e que pode ser chamado para executar uma ao.
Possui um cabealho, uma seo de declarao, uma seo executvel e uma
seo opcional de tratamento de exceo.
Os procedimentos promovem a reutilizao e a manuteno. Uma vez validados,
eles podem ser usados em qualquer nmero de aplicaes. Se a definio for
alterada, somente o procedimento ser afetado, o que simplifica bastante a
manuteno.
13.1.

Criando um procedimento

Sintaxe:

CREATE [OR REPLACE] PROCEDURE nome_do_procedimento


(parametro1 [modo1] tipo_de_dados1,
parametro2 [modo2] tipo_de_dados2,
parametro3 [modo3] tipo_de_dados3 ...)
IS | AS
PL_sql_block;

Onde:

nome_do_procedimento  o nome do procedimento a ser criado


parmetro  nome de uma varivel
modo  tipo de argumento (IN (default), OUT, IN OUT)
tipo_de_dados  tipo de dados do argumento
PL_sql_block  corpo procedural que define a ao a ser executada

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
102 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.2.
Estrutura do corpo procedural (PL/SQL block) de um
procedimento
CABEALHO (obrigatrio)
IS | AS
Seo de declarao
RETURN tipo_de_dados
BEGIN (obrigatrio)
Seo executvel
EXCEPTION (opcional)
Seo de exceo
END; (obrigatrio)
O cabealho determina como o programa ser chamado. Determina o tipo de
programa (procedimento e funo), o nome do programa, a lista de parmetros (se
houver) e a clusula RETURN que se aplica somente s funes.
13.3.

Procedimento:

um bloco PL-SQL criado para armazenar uma srie de aes para execuo
futura. Pode conter zero ou mais parmetros que podem ser transferidos do
ambiente de chamada para ele, mas no tem que retornar um valor.
13.4.

Funo:

um bloco PL-SQL que retorna um nico valor e pode ser chamada para
execuo repetida e como parte de uma expresso. Em resumo, um
procedimento para calcular um valor. Deve ter uma clusula RETURN no
cabealho e pelo menos uma instruo RETURN na seo executvel. Podem ser
chamadas como parte de uma expresso SQL ou como parte de uma expresso
PL-SQL.
13.5.

Seo de declarao:

A palavra chave IS obrigatria.


A seo entre IS e BEGIN freqentemente referenciada como seo de
declarao e nela so definidos os objetos SQL como variveis, constantes,
cursores e excees.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
103 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.6.

Seo de execuo:

As palavras-chave BEGIN e END so obrigatrias e delimitam o corpo de aes a


serem executadas. freqentemente referenciada como seo executvel do
bloco.
A palavra-chave EXCEPTION tambm opcional. A seo entre EXCEPTION e
END freqentemente referenciada como seo de exceo que interrompe
condies de erro pr-definidas. Nela esto definidas as aes a serem tomadas
em caso de erro.
As palavras-chave IS, BEGIN, e EXCEPTION no so seguidas de ponto-e-vrgula,
mas END e todas as outras instrues PL/SQL requerem ponto-e-vrgula.
As estruturas de controle de fluxo e repetio de processamento disponveis so as
mais comumente encontradas:

IF ...THEN ... ELSEIF


Exemplo:
IF v_start > 100 THEN
v_start := 2 * v_start ;
ELSEIF v_start >= 50 THEN
v_start := 0.5 * v_start ;
ELSE
v_start := 0.1 * v_start ;
END IF ;

LOOP... END LOOP


Exemplo:
LOOP
INSERT INTO item(ordid, itemid)
VALUES (v_ordid, v_counter) ;
v_counter := v_counter + 1 ;
EXIT WHEN v_counter > 10 ;
END LOOP;

WHILE... LOOP... END LOOP


Exemplo:
WHILE v_count <= 10 LOOP
INSERT INTO item(ordid, itemid)
VALUES (12345, v_count) ;
v_count := v_count + 1 ;
END LOOP;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
104 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

FOR... LOOP... END LOOP


Exemplo:
FOR i IN 1..10 LOOP
INSERT INTO item(ordid, itemid)
VALUES (v_ordid, i) ;
END LOOP ;

Expresses SQL podem fazer referncia s funes PL/SQL definidas pelo usurio,
que podem ser colocadas em qualquer lugar onde possa ser colocada uma funo
SQL interna (max, min, count, etc).

13.7.

Permite clculos muito complexos, difceis ou indisponveis com o SQL.


Aumenta a independncia de dados processando a anlise de dados complexos
dentro do servidor de banco de dados, no lugar de recuperar os dados para uma
aplicao
Aumenta a eficincia das consultas executando as funes na prpria consulta e
no na aplicao
13.8.

Vantagens das funes

Locais possveis de chamada de funes

Lista de seleo de um comando SELECT


Condio das clusulas WHERE e HAVING
Clusulas ORDER BY e GROUP BY
Clusulas SET do commando UPDATE
Clusulas VALUES do commando INSERT

13.9.

ELIMINANDO UMA FUNO

DROP FUNCTION nome_da_funo

13.10.

Comparando PROCEDIMENTOS e FUNES

PROCEDIMENTO
Executar como um programa
Tipo de dados sem RETURN
Pode retornar nenhum, um ou vrios
valores

FUNO
Chamar como parte de uma expresso
Deve conter um tipo de dados RETURN
Deve retornar um valor nico

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
105 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.11.

Declarando variveis

As variveis podem ter vrios tipos em um procedimento:


o BOOLEANO: Armazena valores TRUE e FALSE
o DATE: armazena uma data vlida
o BLOB: Armazena uma imagem (uma fotografia por ex)
o LONG RAW: Armazena um texto longo (um discurso por ex)
o NUMBER: Armazena nmeros
o BFILE: Armazena um filme
o VARCHAR2: Armazena um texto
Exemplos de declarao de variveis:
V_dt_nasc
DATE;
V_nr_dept
NUMBER(2) NOT NULL := 10;
V_nm_cidade
VARCHAR2(13) := Juiz de Fora
Quando o valor a ser armazenado em uma varivel tiver as caractersticas
de uma coluna do banco de dados voc poder usar o atributo %TYPE em
vez de embutir no cdigo o tipo de dados e a preciso de uma varivel.
Neste caso a varivel herda o tipo de dado da coluna.
Exemplo de utilizao do atributo %TYPE:
v_nome
emp.nm_emp%TYPE;
v_depto
emp.nr_dept%TYPE := 10;
Exemplo de declarao de varivel booleana:
V_comiss
BOOLEAN := (v_sal1 < v_sal12)
13.12.

Funes teis

O PL/SQL fornece muitas funes teis que ajudam a manipular dados.


Algumas delas fazem converso de tipos de dados, veja as sintaxes a seguir:
TO_CHAR (valor, fmt)
TO_DATE (valor, fmt)
TO_NUMBER(valor, fmt)
Onde:
Exemplo:

valor uma string de caracteres, nmero ou data


fmt o modelo de formato usado para converter o valor
v_date := TO_DATE(13/01/1998);

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
106 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.13.

Diretrizes de Programao

Procure sempre seguir alguma diretriz de programao quando estiver


produzindo um cdigo, para que ele seja claro e facilite futuras manutenes.
A tabela a seguir fornece diretrizes de utilizao de letras maisculas ou
minsculas para distinguir as palavras-chave de objetos nomeados.
CATEGORIA
Instrues SQL
Palavras-chave PL/SQL
Tipos de dados
Identificadores e parmetros
Tabelas e colunas de banco
de dados
13.14.

MAISCULA /
MINSCULA
MAISCULA
MAISCULA
MAISCULA
MINSCULA
MINSCULA

EXEMPLOS
SELECT, INSERT
DECLARE, BEGIN, IF
VARCHAR2, DATE
v_sal, emp, salrio
nm_emp, nr_depto

Instrues SQL em PL/SQL

Quando precisar extrair informaes ou alterar dados nos bancos de dados,


podemos utilizar o PL/SQL que suporta integralmente a linguagem de
manipulao de dados (INSERT, UPDATE e DELETE) e os comandos de
controle de transao (COMMIT e ROLLBACK).
Poderemos utilizar as instrues SELECT para preencher as variveis com os
valores consultados em uma linha da tabela. Seus comandos DML
(manipulao de dados) podem processar vrias linhas.
O PL/SQL no suporta instrues DDL (Data Definition Language) como
CREATE TABLE, ALTER TABLE, DROP INDEX, nem instrues DCL (Data
Control Language) como GRANT e REVOKE.
13.14.1.

Instrues SELECT em PL/SQL

A clusula INTO mandatria para que se possa armazenar o contedo


advindo do banco de dados em variveis controladas pelo programa.
Exemplo:
DECLARE
v_nr_dept
v_loc
BEGIN
SELECT
INTO
FROM

NUMBER(2);
VARCHAR2(15);
nr_dept, nm_dept
v_nr_dept, v_loc
depot

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
107 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

WHERE
nm_depto = VENDAS;
As consultas devem retornar apenas uma linha. Quando retornam mais de
uma linha ou linha nenhuma, geram mensagens de erro que o PL/SQL lida,
destacando as excees padro NO_DATA_FOUND e
TOO_MANY_ROWS, as quais podemos capturar na seo de excees.

As funes de grupo no podero ser utilizadas na sintaxe do PL/SQL. Elas


so usadas em instrues SQL embutidas em um bloco executvel do
PL/SQL.
13.14.2.

Instrues INSERT, UPDATE e DELETE em PL/SQL

As instrues de manipulao de dados no sofrem nenhuma alterao em


relao sua utilizao dentro de um comando SQL.
13.15.

Instrues COMMIT e ROLLBACK em PL/SQL

Podemos controlar a lgica das transaes tornando permanentes ou


descartando as alteraes nos dados. As instrues de manipulao de dados
no sofrem nenhuma alterao em relao sua utilizao dentro de um
comando SQL.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
108 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.16.

Cursores

uma rea de memria que armazena as linhas recuperadas de um comando


SELECT. Portanto um cursor SEMPRE criado com base em um comando
SELECT.
Como as linguagens procedurais no podem trabalhar com blocos de
informao (conjunto de linhas retornadas por um SELECT), torna-se
necessrio a criao de um CURSOR para se ter acesso a cada uma das
linhas da consulta. Dessa forma criado um ponteiro que indica de que linha a
informao est sendo retirada.
O cursor semelhante ao RECORDSET de muitas linguagens de
programao. Possui quatro fases distintas para sua utilizao:
Declarao:
Declarado na mesma seo de declarao das variveis.
Sintaxe: DECLARE CURSOR nome_cursor IS comando_select
Abertura:
Neste instante o comando SELECT declarado executado e os dados ficam
disponveis na memria.
Sintaxe: OPEN nome_cursor
Busca de dados
Para recuperar as informaes da linha onde est posicionado o ponteiro do
cursor, utilizamos o comando FETCH. As variveis utilizadas devem estar
declaradas.
Sintaxe: FETCH nome_cursor INTO lista_de_variveis
Fechamento
Para fechar um cursor aberto e liberar a rea de memria por ele utilizada
usamos o comando CLOSE.
Sintaxe: CLOSE nome_cursor

DECLARE

Define a
estrutura da
consulta a ser
executada
NO

OPEN

FETCH

Executa a
consulta e
vincula as
variveis

Carrega a
linha atual
para
variveis

EMPTY

CLOSE
SIM

Libera a
rea de
momria

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
109 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Alguns atributos do cursor podem ser testados durante a execuo do programa:

1. %FOUND  retorna TRUE se retornou alguma linha, FALSE se no retornou


linha e NULL se no tiver sido executado pelo menos um FETCH
2. %NOTFOUND  retorna FALSE se retornou alguma linha, TRUE se no
retornou linha e NULL se no tiver sido executado pelo menos um FETCH
3. %ROWCOUNT  Retorna o nmero de linhas processadas
4. %ISOPEN  Retorna TRUE se o cursor estiver aberto e FALSE do contrrio.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
110 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.17.

Tratando Excees em PL/SQL

Uma exceo um identificador em PL/SQL, criado durante a execuo de um


bloco que termina seu corpo principal de aes. Um bloco sempre termina
quando o cdigo PL/SQL cria uma exceo, mas voc especifica um gerente
de excees para executar aes finais.
Existem dois mtodos para se criar uma exceo:
Automaticamente quando ocorre um erro do Oracle. Exemplo: Quando
nenhuma linha recuperada do banco de dados em uma instruo SELECT,
ocorre um erro no Oracle (ORA-01403) e a exceo NO_DATA_FOUND
criada.
Explicitamente quando o usurio utiliza a instruo RAISE dentro de um
bloco de instrues, uma exceo criada.
Existem dois caminhos para se tratar uma exceo:
Capturando a exceo
Se a exceo for criada na seo executvel do bloco, o processamento
desviado para o gerente de exceo correspondente na seo de exceo do
bloco. Se o cdigo PL/SQL conseguir tratar a exceo com xito, a exceo
no propagar para o ambiente ou bloco delimitado. O bloco PL/SQL
concludo com xito.
SINTAXE:
EXCEPTION
WHEN exceo1 [ OR exceo2 ...] THEN
Instruo1;
Instruo2;

WHEN exceo3[ OR exceo4...] THEN


Instruo3;
Instruo4;

[WHEN OTHERS THEN


Instruo5;
Instruo6;
]
Propagando a exceo
Se a exceo for criada na seo executvel do bloco e no houver o gerente
de exceo correspondente, o bloco PL/SQL terminar com falha e a exceo
ser propagada para o ambiente de chamada.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
111 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Existem trs tipos de exceo:


Tipo de Exceo

Descrio

Orientaes para
tratamento
Erro predefinido pelo
Um dos cerca de 20 erros No declare. Permita que
Oracle Server
que ocorrem com mais
o Oracle Server crie as
freqncia
excees implicitamente
Erro NO predefinido pelo Qualquer outro erro
Declare dentro da seo
Oracle Server
padro do Oracle Server
declarativa e permita que
o Oracle Server crie as
excees de forma
implcita
Erro definido pelo usurio Uma condio que o
Declare dentro da seo
desenvolvedor determina declarativa e crie
que seja anormal
excees de forma
explcita
Exemplo de uso de uma exceo predefinida:
EXCEPTION
WHEN NO_DATA_FOUND THEN
Instruo1;
Instruo2;

WHEN TOO_MANY_ROWS THEN


Instruo3;
Instruo4;

[WHEN OTHERS THEN


Instruo5;
Instruo6;
]
Exemplo de uso de uma exceo NO predefinida:
DECLARE
e_emp_restantes EXCEPTION;
PRAGMA EXCEPTION_INIT (e_emp_restantes, -2292);
v_nr_dept dept.nr_dept%TYPE := &param_nr_dept
BEGIN
DELETE FROM dept
WHERE deptno = v_nr_dept;
COMMIT;
EXCEPTION
WHEN e_emp_restantes THEN
DBMS.OUTPUT.PUT_LINE (Departamento no pode ser excludo);
END;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
112 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Excees Predefinidas:

Nome da Exceo

Nro erro
Descrio
Oracle
Server
ACCESS_INTO_NULL
ORA-06530 Tentativa de atribuir valores aos
atributos de um objeto no
inicializado
COLLECTION_IS_NULL
ORA-06531 Tentativa de aplicao de mtodos
de conjunto diferentes de EXISTS
para um array ou tabela aninhada
no inicializada
CURSOR_ALREADY_OPEN
ORA-06511 Tentativa de abertura de um cursor
j aberto
DUP_VAL_ON_INDEX
ORA-00001 Tentativa de insero de um valor
duplicado
INVALID_CURSOR
ORA-01001 Ocorreu operao ilegal do cursor
INVALID_NUMBER
ORA-01722 Falha da converso de string de
caracteres para nmero
LOGIN_DENIED
ORA-01017 Estabelecendo login com o Oracle
com um usurio ou senha invlida
NO_DATA_FOUND
ORA-01403 SELECT de linha nica no
retornou dados
NOT_LOGGED_ON
ORA-01012 Emisso de chamada de banco de
dados sem estar conectado ao
Oracle
PROGRAM_ERROR
ORA-06501 Problema interno no cdigo
PL/SQL
ROWTYPE_MISMATCH
ORA-06504 Atribuio de tipos incompatveis
STORAGE_ERROR
ORA-06500 Memria esgotada ou corrompida
SUBSCRIPT_BEYOND_COUNT ORA-06533 Uso de nmero de ndice maior
que o limite do conjunto
SUBSCRIPT_OUTSIDE_LIMIT
ORA-06532 Uso de ndice fora da faixa legal (1 por exemplo)
TIMEOUT_ON_RESOURCE
ORA-00051 Tempo esgotado enquanto o
Oracle aguarda por um recurso
TOO_MANY_ROWS
ORA-01422 SELECT de linha nica retornou
mais de uma linha
VALUE_ERROR
ORA-06502 Erro aritmtico, de converso,
truncamento ou restrio de
tamanho
ZERO_DIVIDE
ORA-01476 Tentativa de diviso por zero

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
113 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.18.
01)
02)
03)
04)
05)
06)
07)
08)
09)
10)
11)
12)
13)
14)
15)
16)
17)
18)

Exemplo de um procedimento
CREATE OR REPLACE PROCEDURE TTTTT
a T1.e%TYPE;
b T1.f%TYPE;
CURSOR T1Cursor IS
SELECT e, f
FROM T1
WHERE e < f
FOR UPDATE;
BEGIN
OPEN T1Cursor;
LOOP
FETCH T1Cursor INTO a, b;
EXIT WHEN T1Cursor%NOTFOUND;
DELETE FROM T1 WHERE CURRENT OF T1Cursor;
INSERT INTO T1 VALUES(b, a);
END LOOP;
CLOSE T1Cursor;
END;

o Aqui esto as explicaes para as vrias linhas deste programa:


o A linha (1) o cabealho do procedimento
o As linhas (2) e (3) declara as variveis a e b para que tenham
tipos iguais aos tipos dos atributos e e f da tabela T1. Embora
saibamos que esses tipos so INTEGER, sabiamente garantimos
que quaisquer tipos que eles possam ter sero copiados para as
variveis PL/SQL.
o As linhas de (4) a (8) definem o cursor T1Cursor. Ele avana
sobre uma tabela definida pela consulta SELECT-FROMWHERE. Esta consulta seleciona as linhas de T1 cujo primeiro
componente menor do que o segundo componente.
o A linha (8) declara o cursor FOR UPDATE j que modificaremos
T1 usando este cursor mais adiante na linha (14). Em geral, FOR
UPDATE desnecessrio se o cursor no for usado para
modificao.
o A linha (9) inicia a seo executvel do programa.
o A linha (10) abre o cursor, um passo essencial, e nesse
momento que o SQL do cursor executado, ou seja, aqui os
dados so trazidos do banco de dados e armazenadas em forma
de tabela na memria.
o As linhas (11) a (16) so um lao PL/SQL. Note que tal como um
lao envolvido por LOOP e END LOOP.
o Na linha (12), pega-se o contedo atual do cursor e coloca-o
dentro das variveis locais. Em geral, a instruo FETCH deve
fornecer variveis para cada componente da linha resgatada.
Uma vez que a consulta das linhas (5) a (8) produz pares,
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
114 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

o
o
o
o

corretamente fornecemos duas variveis, e sabemos que elas


so do tipo correto.
Na linha (13), um teste para a condio de trmino do lao. Seu
significado deve ser claro: %NOTFOUND depois do nome de um
cursor verdadeiro quando uma busca atravs daquele cursor
no conseguiu encontrar mais linhas.
Na linha (14), uma instruo DELETE do SQL que apaga a linha
corrente usando a condio WHERE especial CURRENT OF
T1Cursor
Na linha (15), uma instruo INSERT do SQL que insere a tupla
oposta em T1.
A linha (17) fecha o cursor, o que libera a rea de memria
utilizada.
A linha (18) finaliza o programa PL/SQL.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
115 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.19.

Exemplo de uma funo


FUNCTION FU_LOTC_TREM(
P_ID_TREM IN VARCHAR2,
P_IC_ERRO_CIRC_TREM IN VARCHAR2,
P_IC_ESTD_TREM IN VARCHAR2
) RETURN VARCHAR2
IS
BEGIN DECLARE
nCarreg NUMBER(3);
nVazio NUMBER(3);
BEGIN
IF P_IC_ESTD_TREM NOT IN ('1', '2')
THEN /* No calcular para trens suprimidos e previstos */
BEGIN
SELECT
NVL(SUM(DECODE (CD_LOTC_VAGAO, 'V', 1, 0)),0),
NVL(SUM(DECODE (CD_LOTC_VAGAO, 'C', 1, 0)),0)
INTO nVazio, nCarreg
FROM T_HSTR_CMPS_CIRC_VAGAO
WHERE NU_SEQC_HSTR_CIRC_TREM = 2
AND ID_TREM = P_ID_TREM;
END;
IF nCarreg = 0 AND nVazio = 0
THEN
/* No tem registro na tabela T_HSTR_CMPS_CIRC_VAGAO
para o trem corrente */
return('V'); --return(NULL);
ELSIF nCarreg >= nVazio THEN
return('C');
ELSE
return('V');
END IF;
ELSE
RETURN(NULL);
END IF;
END;
END; -- End of FU_LOTC_TREM

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
116 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

13.20.

Benefcios que os programas armazenados trazem

Melhoria da manuteno:
Rotinas podem ser melhoradas sem interferir com outros usurios do banco
afetando vrias aplicaes simultaneamente
Melhoria na segurana dos dados e na integridade:
Usando privilgios de segurana para controlar acessos dos usurios aos
programas
Melhoria de desempenho:
O nmero de chamadas ao banco de dados e o trfego de redes podem ser
reduzidos agrupando comandos.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
117 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

CONTROLE
DE
ACESSO
(SEGURANA)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
118 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

14. Viso Geral


Em um ambiente de vrios usurios, precisamos manter a segurana de acesso e
de uso do banco de dados para:
controlar o acesso ao banco de dados;
conceder acesso a objetos especficos no banco de dados;
confirmar privilgios concedidos e recebidos;
criar sinnimos para os objetos de banco de dados.
A segurana de banco de dados pode ser classificada em duas categorias:
segurana de sistema e segurana de banco de dados.
A segurana de sistema cobre o acesso e o uso do banco de dados no nvel de
sistema, por exemplo, nome do usurio e senha, espao em disco alocado ao
usurio e operaes permitidas pelo usurio.
A segurana de banco de dados cobre o acesso e o uso dos objetos de banco de
dados e as aes que esses usurios possam ter sobre os objetos.
14.1.

Privilgios:

Os privilgios constituem o direito de executar instrues SQL particulares. O


administrador de banco de dados um usurio de alto nvel com a habilidade de
conceder aos usurios acesso ao banco de dados e aos objetos..
Os usurios requerem privilgios de sistema para obter acesso aos privilgios de
objeto e de banco de dados para manipular o contedo dos objetos.
Tambm pode ser fornecido aos usurios o privilgio de conceder privilgios
adicionais a outros usurios ou a funes, que so grupos nomeados de privilgios
relacionados.
Mais de 80 privilgios esto disponveis para usurios e funes. Os privilgios de
sistema so tipicamente fornecidos pelo administrador do banco de dados.
Privilgios tpicos do administrador de banco de dados (DBA):
Privilgio de sistema
CREATE USER
DROP USER
DROP ANY TABLE
BACKUP ANY TABLE

Operaes Autorizadas
Permite criao de novos usurios
Permite eliminao de usurios
Permita eliminao de tabela
Permite cpia de tabelas com o utilitrio de exportao

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
119 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

14.2.

Criao de usurio:

Sintaxe: CREATE USER nome_usurio IDENTIFIED BY senha;


Onde:
nome_usurio o nome do usurio a ser criado;
senha a senha a ser informada pelo usurio quando do login.
No momento da criao, o usurio ainda no possui nenhum privilgio. A partir da
criao que o administrador pode conceder privilgios ao usurio criado.
Para alterar a senha basta o DBA usar:
ALTER USER nome_usuario IDENTIFIED BY nova_senha
14.3.

Concesso de privilgios:

O DBA usa a instruo GRANT para alocar privilgios de sistema para usurios.
Quando os privilgios forem concedidos, o usrio poder utiliz-los imediatamente.
Sintaxe:
GRANT privilgio1 [, privilgio2, ...]
TO usurio1 [,usurio2, ...]
Onde:
Privilgio o privilgio de sistema a ser concedido
Usurio o nome do usurio a ganhar o privilgio
Privilgios tpicos de um desenvolvedor de aplicaes:
Privilgio de sistema
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE

Operaes Autorizadas
Conectar-se ao bando de dados
Criar tabela no esquema do usurio
Criar uma seqncia no esquema do usurio
Criar uma view no esquema do usurio
Criar uma funo, pacote ou procedimento armazenado
no esquema do usurio.

Exemplo de concesso de privilgios:


GRANT create table, create sequence, create view TO fulano;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
120 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

14.4.

Criando Perfis (ROLE):

Perfil ou role, um grupo nomeado de privilgios relacionados que podem ser


concedidos ao usurio.
Isso faz com que a concesso e revogao de privilgios se tornem mais fcil de
desempenhar e manter.
Um usurio pode ter acesso a vrios perfis e vrios usurios podem ter o mesmo
perfil atribudo a eles. Os papis so criados tipicamente para uma aplicao de
banco de dados.
O DBA deve primeiramente criar a ROLE para ento atribuir privilgios e usurios a
ela.
Sintaxe:
CREATE ROLE nome_role
Onde:
nome_role o nome do papel a ser criado
Depois de criada a ROLE, o DBA pode ento usar a instruo GRANT para atribuir
usurios e privilgios ROLE.
14.5.

Concedendo privilgios ROLE:

CREATE ROLE r_gerente;


GRANT create table, create view TO r_gerente;
GRANT r_gerente TO fulano, ciclano, beltrano;
O exemplo acima cria uma ROLE chamada r_gerente, permite que esta ROLE crie
tabelas e views e atribui esta ROLE aos gerentes fulano, ciclano e beltrano.
14.6.

Privilgios de Objeto

Um privilgio de objeto um privilgio ou direito de desempenhar uma determinada


ao em uma tabela, view, seqncia ou procedimento especfico.
Cada objeto tem um conjunto determinado de privilgios concedveis. A tabela
abaixo lista os privilgios de vrios objetos.
Os privilgios UPDATE, REFERENCES e INSERT podem ser restringidos
especificando-se um subconjunto das colunas atualizveis.
Um privilgio SELECT pode ser restringido criando uma view com um subconjunto
de linhas e colunas e concedendo o privilgio de SELECT na view.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
121 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

Privilgio de
Objeto
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE

Tabela

View

X
X

Seqncia

Procedimento

X
X

X
X
X
X
X

X
X
X

Sintaxe:
GRANT privilgio1, privilgio2, ... | ALL [(coluna1, coluna2,...) ]
ON nome_objeto
TO { nome_usuario / nome_role | PUBLIC}
[WITH GRANT OPTION]
Onde:
Privilgio um privilgio de objeto a ser concedido
ALL especifica todos os privilgios de objeto
coluna especifica a coluna de uma tabela ou view sobre as quais os privilgios
so concedidos
ON nome_objeto o objeto sobre o qual os privilgios so concedidos
TO identifica a quem o privilgio concedido
PUBLIC concede privilgios de objeto a todos os usurios
WITH GRANT OPTION permite que o cedente conceda privilgios de objeto a
outros usurios e papis (roles)
Exemplos de concesso de privilgios de objeto:
GRANT select
ON emp
TO fulano, ciclano;
GRANT update (nm_cliente, cd_cliente)
ON dept
TO beltrano;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
122 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

14.7.

Revogao de Privilgios:

A remoo de privilgios concedidos feita atravs da instruo REVOKE que


revoga os privilgios dos usurios nomeados e dos outros usurios para quem
esses privilgios foram concedidos pela clusula WITH GRANT OPTION.
Sintaxe:
REVOKE {privilgio1 [,privilgio2, ...] | ALL}
ON nome_objeto
FROM { usurio1, [,usurio2, ...] | funo | PUBLIC }
[CASCADE CONSTRAINTS] ;
Onde:
Privilgio um privilgio de objeto a ser revogado
ALL especifica todos os privilgios de objeto
ON nome_objeto o objeto sobre o qual os privilgios so revogados
FROM identifica de quem o privilgio revogado
PUBLIC revoga privilgios de objeto a todos os usurios
CASCADE CONSTRAINTS obrigatrio para remover quaisquer restries de
integridade feitas ao objeto por meio do privilgio REFERENCES
Exemplo de revogao de privilgios de objeto:
REVOKE select, insert
ON emp
FROM fulano;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
123 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

GATILHOS
(TRIGGERS)

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
124 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15. GATILHOS (TRIGGERS)


Gatilho um bloco PL/SQL executado de forma implcita sempre que ocorre um
determinado evento, podendo ser um gatilho de banco de dados como um gatilho
de aplicao.
Gatilhos so executados implicitamente quando uma instruo INSERT, UPDATE
ou DELETE emitida junto tabela associada, independente de que usurio esteja
conectado e da aplicao que esteja sendo executada.
Os gatilhos de banco de dados tambm podem ser executados implicitamente
quando ocorrem algumas aes de usurio ou de sistema de banco de dados, por
exemplo, quando se estabelece um LOGON ou quando o administrador desativa o
banco. Os gatilhos de aplicao so executados implicitamente sempre que ocorre
um determinado evento em uma aplicao.
15.1.

Diretrizes para se projetar gatilhos

Use gatilhos para garantir que quando uma operao especfica for executada,
as aes relacionadas tambm o sero.
Use gatilhos de banco de dados somente para aes globais, centralizadas que
devem ser disparadas pela instruo de acionamento, independente de que
usurio ou aplicao a enviou.
No defina gatilho para duplicar ou substituir a funcionalidade j includa no
banco de dados, por exemplo, para implementar regras de integridade j
definidas na construo da estrutura do banco (restries ou CONSTRAINTS).
O uso intenso de gatilhos pode resultar em interdependncias complexas de
difcil manuteno, por isso use gatilhos somente quando necessrio e tenha
cuidado com os efeitos recursivos e em cascata.
15.2.

Componentes de um gatilho

COMPONENTE
Tempo de gatilho

Evento de
acionamento
Tipo de gatilho
Corpo do gatilho

DESCRIO
Define quando o gatilho
dispara em relao ao evento
de acionamento

VALORES POSSVEIS
Para tabelas:
BEFORE
AFTER
Para views:
INSTEAD OF
Define quais so as operaes INSERT
de manipulao de dados que UPDATE
disparam o gatilho
DELETE
Define quantas vezes
Instruo
executa-se o corpo do gatilho Linha
Define quais aes o
Completa o bloco PL/SQL
gatilho ir executar

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
125 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

A ordem de disparo dos gatilhos arbitrria. Para assegurar que os gatilhos do


mesmo tipo disparem em uma determinada ordem, consolide-os em um gatilho que
chame procedimentos separados na ordem desejada.
A diferena entre gatilho de linha e de instruo claramente visualizada no
seguinte exemplo. No caso de um evento de alterao de 200.000 linhas em uma
tabela, o gatilho de linha ser disparado 200.000 vezes, enquanto o gatilho de
instruo ser disparado uma nica vez.
15.3.

Gatilho BEFORE

Este tipo de gatilho executa o corpo do procedimento ANTES do evento DML de


acionamento em uma tabela.
usado com freqncia nas seguintes situaes:
Quando a ao do gatilho deve determinar se a instruo de acionamento
possui permisso para ser concluda, pois assim evita-se processamento
desnecessrio da instruo de acionamento e rollbacks eventuais nos casos
em que surge uma ao de acionamento.
Para derivar valores de coluna antes de concluir uma instruo INSERT ou
UPDATE de acionamento
15.4.

Gatilho AFTER

Este tipo de gatilho executa o corpo do procedimento APS o evento DML de


acionamento em uma tabela.
usado com freqncia nas seguintes situaes:
Quando se deseja concluir a instruo de acionamento antes de executar a
ao de acionamento.
Se um gatilho BEFORA j estiver presente e um gatilho AFTER puder
executar aes diferentes na mesma instruo de acionamento
15.5.

Eventos de Acionamento

O evento de acionamento do gatilho pode ser uma instruo INSERT, UPDATE ou


DELETE de uma tabela.
Quando o evento de acionamento UPDATE, possvel incluir uma lista de
colunas a fim de identificar qual(is) coluna(s) deve(m) ser alterada(s) para disparar o
gatilho. Ex: UPDATE OF sal ...
No possvel especificar uma lista de colunas para uma instruo INSERT ou
DELETE, pois elas sempre afetam linhas inteiras.
O evento de acionamento pode conter diversas operaes DML. Exs:
1) ... INSERT OR UPDATE OR DELETE
2) INSERT OR UPDATE OF job
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
126 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.6.

Tipos de gatilho:

Podemos especificar o nmero de vezes em que a ao do gatilho executada:


uma vez para cada linha afetada pela instruo de acionamento, por ex, vrias
linhas UPDATE (gatilho de linha) ou uma vez para a instruo de acionamento,
no importando quantas linhas foram afetadas (gatilho de instruo).
15.7.

Corpo do Gatilho:

A ao do gatilho define o que necessita ser feito ao emitir o evento de


acionamento. O bloco PL/SQL pode conter instrues SQL e PL/SQL, definir
construes PL/SQL como variveis, cursores, excees, entre outros. Podemos
tambm chamar outro procedimento PL/SQL ou Java.
Gatilhos de linha podem utilizar nomes de correlao para obter acesso aos valores
de coluna antigos e novos da linha que est sendo processada pelo gatilho.
15.8.
UPDATE
SET
WHERE

Seqncia de Disparo:
emp
sal = sal * 1.1
nr_dep = 30;
Gatilho de Instruo BEFORE

NR_EMP
7839

NM_EMP
Fulano

NR_DEP
30

7698

Ciclano

30

7788

Beltrano

30

Gatilho de Linha Before


Gatilho de Linha After
Gatilho de Linha Before
Gatilho de Linha After
Gatilho de Linha Before
Gatilho de Linha After
Gatilho de Instruo After

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
127 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.9.

Sintaxe para Criao de Gatilhos de Instruo:

CREATE [OR REPLACE] TRIGGER nome_gatilho


tempo
evento1 [OR evento2 OR evento3]
ON nome_tabela
corpo_gatilho
onde:
nome_gatilho: o nome do gatilho que se quer dar
tempo: indica o tempo de disparo do gatilho (BEFORE para antes e AFTER para
depois)
evento: indica a operao de manipulao de dados que leva o gatilho a disparar
(INSERT, UPDATE [OF coluna], DELETE)
nome_tabela: indica a tabela associada ao gatilho
corpo_gatilho: so as instrues PL/SQL que definem as aes a serem executadas
pelo gatilho, comeando por DECLARE ou BEGIN e terminando com END.
15.10.

Exemplo de Gatilho de Instruo:

CREATE OR REPLACE TRIGGER seg_incl_emp


BEFORE INSERT ON emp
BEGIN
IF
(TO_CHAR(SYSDATE,DY) IN (SAT,SUN)) OR
(TO_CHAR(SYSDATE,HH24) NOT BETWEEN 08 AND 18)
THEN RAISE APPLICATION ERROR (-20500, Empregados s podem ser
includos durante expediente normal.);
END IF;
END;
Se houver tentativa de insero de registro de empregado fora do horrio
estabelecido, o SGBD emitir uma mensagem de erro conforme o gatilho
estabelece:
ERROR at line 1:
ORA-20500: Empregados s podem ser includos durante expediente normal.
ORA-06512: at seg_incl_emp , line 4
ORA-04088: error during execution of trigger seg_incl_emp

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
128 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.11.

Usando predicados condicionais:

CREATE OR REPLACE TRIGGER seg_incl_emp


BEFORE INSERT OR UPDATE OR DELETE ON emp
BEGIN
IF
(TO_CHAR(SYSDATE,DY) IN (SAT,SUN)) OR
(TO_CHAR(SYSDATE,HH24) NOT BETWEEN 08 AND 18)
THEN
IF INSERTING
THEN
RAISE APPLICATION ERROR (-22500, Empregados s podem
ser includos durante expediente normal.);
ELSEIF DELETING
THEN
RAISE APPLICATION ERROR (-22500, Empregados s podem
ser excludos durante expediente normal.);
ELSEIF UPDATING (SAL)
THEN
RAISE APPLICATION ERROR (-22500, Salrios s podem ser
atualizados durante expediente normal.);
ELSE
RAISE APPLICATION ERROR (-22500, Empregados s podem
ser atualizados durante expediente normal.);
END IF;
END IF;
END;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
129 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.12.

Sintaxe para Criao de Gatilhos de Linha:

CREATE [OR REPLACE] TRIGGER nome_gatilho


tempo
evento1 [OR evento2 OR evento3]
ON nome_tabela
[REFERENCING OLD AS antigo | NEW AS novo]
FOR EACH ROW
[WHEN condio]
corpo_gatilho
onde:
nome_gatilho: o nome do gatilho que se quer dar
tempo: indica o tempo de disparo do gatilho (BEFORE para antes e AFTER para
depois)
evento: indica a operao de manipulao de dados que leva o gatilho a disparar
(INSERT, UPDATE [OF coluna], DELETE)
nome_tabela: indica a tabela associada ao gatilho
REFERENCING: especifica os nomes da correlao para os valores antigos e
novos da linha atual (os defaults so OLD e NEW).
FOR EACH ROW designa que o gatilho de linha
WHEN especifica a restrio do gatilho. Esse predicado condicional avaliado
para cada linha a fim de determinar se o corpo do gatilho ser executado ou no.
corpo_gatilho: so as instrues PL/SQL que definem as aes a serem executadas
pelo gatilho, comeando por DECLARE ou BEGIN e terminando com END.
15.13.

Exemplo de Gatilho de Linha:

CREATE OR REPLACE TRIGGER verifica_salario


BEFORE INSERT OR UPDATE OF sal ON emp
FOR EACH TOW
BEGIN
IF NOT (:NEW.cargo IN (GERENTE,PRESIDENTE))
AND :NEW.sal > 5000
THEN RAISE APPLICATION_ERROR (-20202, Empregado no pode
ganhar esse valor);
END IF;
END;

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
130 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.14.

Usando qualificadores antigos e novos:

Podemos criar gatilhos para registrar valores de diversas colunas antes e depois
das alteraes dos dados em determinadas tabelas chave de nossos sistemas, por
exemplo, fazendo log da atividade na tabela, utilizando os qualificadores OLD e
NEW com o respectivo nome de coluna.
Os qualificadores OLD e NEW s esto disponveis nos gatilhos de linha e devem
ser precedidos com dois-pontos em cada instruo PL/SQL, exceto quando
referenciados condio de restrio WHEN (ex: WHEN (NEW.cargo =
VENDEDOR)
CREATE OR REPLACE TRIGGER audit_valores_emp
AFTER DELETE OR INSERT OR UPDATE ON emp
FOR EACH ROW
BEGIN
INSERT INTO tab_audit_emp
(nm_usuario
, dt_hr_operacao
,nr_emp
,nm_antigo
,nm_novo
,cargo_antigo
,cargo_novo
,sal_antigo
,sal_novo)
VALUES
(USER
,SYSDATE
,:OLD.nr_emp
,:OLD.nm_emp
,:NEW.nm_emp
,:OLD.cargo
,:NEW.cargo
,:OLD.sal
,:NEW.sal);
END;
Operao
INSERT
UPDATE
DELETE

Valor Antigo
NULL
Valor antes de atualizar
Valor antes de deletar

Valos Novo
Valor inserido
Valor aps atualizar
NULL

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
131 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

15.15.

Diferenas entre gatilhos e procedimentos:

H duas diferenas entre gatilhos e procedimentos armazenados. Os gatilhos so


chamados implicitamente enquanto que os procedimentos so chamados
explicitamente.
Ao contrrio dos procedimentos armazenados, instrues COMMIT e ROLLBACK
no so permitidas no corpo do gatilho.
15.16.

Gerenciando gatilhos:

Quando um gatilho criado pela primeira vez, ele ativado automaticamente. Para
gatilhos ativados, o SGBD verifica as restries de integridade e garante que os
gatilhos no as comprometem.
Para desativar ou reativar gatilhos especficos usamos a sintaxe:
ALTER TRIGGER nome_gatilho DISABLE | ENABLE
Para desativar ou reativar todos os gatilhos de uma tabela usamos a sintaxe:
ALTER TABLE nome_tabela DISABLE | ENABLE ALL TRIGGERS
Para remover um gatilho no mais necessrio usamos a sintaxe:
DROP TRIGGER nome_gatilho
15.17.

Aplicaes dos Gatilhos:

Podemos desenvolver gatilhos a fim de avanar os recursos:


Recurso
Segurana
Auditoria
Integridade de dados
Integridade referencial
Replicao de tabela
Dados derivados
Registro de Eventos

Avano
Os gatilhos permitem acesso tabela de acordo com
os valoras dos dados.
Os gatilhos controlam os valores das operaes de
dados das tabelas.
Os gatilhos implementam regras de integridade
complexas.
Os gatilhos implementam a funcionalidade no
padronizada.
Os
gatilhos
copiam
tabelas
para
rplicas
simultaneamente.
Os gatilhos calculam automaticamente os valores dos
dados derivados.
Os gatilhos registram os eventos de forma
transparente.

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
132 - 133

Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________

16. Bibliografia
[Date91] Date, C.J.; Introduo a Sistemas de Bancos de Dados, traduo da 4a.
edio norte-americana, Editora Campus, 1991.
[KS94] Korth, H.F. e Silberschatz, A.; Sistemas de Bancos de Dados, Makron
Books, 2a. edio revisada, 1994.
[EN94] Elmasri, R. e Navathe, S.B.; Fundamentals of Database Systems,
Benjamin-Cummings Publishing, 2nd. Edition, 1994.
[ERW98] ERwin, verso 3.5.2 - Logic Works / Platinum Technology Inc., 1998.
[Heu98] Heuser, C. A.; Projeto de Banco de Dados, Sagra Luzatto, 1998.
[MA97] Microsoft Access verso 7.0 - (integrante do Microsoft Office 97),
Microsoft Corporation, 1998.
[OHE96] Orfali, R., Harkey, D. & Edwards, J.; The Essential Client/Server Survival
Guide, 2nd. edition, Wiley Computer Publishing, 1996.
[Ram98] Ramakrishnan, R.; Database Management Systems, McGraw-Hill, 1998.
[SA98] System Architect Data Architect, verso 4.0 Popkin Software &
Systems Inc., 1998.
[OPCH] Oliveira P. Celso Henrique SQL Curso Prtico 2002
[ORA] Oracle University Introduo ao Oracle SQL e PL/SQL - 2000

______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
133 - 133

Potrebbero piacerti anche