Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Banco de Dados
___________________________________________________________________________________________________
SISTEMAS
GERENCIADORES
DE BANCO
DE DADOS
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
1 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
1.
2.
GERENCIANDO TABELAS............................................................................................................... 16
2.1.
2.2.
2.3.
2.4.
2.5.
3.
6.
5.
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
______________________________________________________________________________________________________________
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.
7.
8.
9.
10.
10.1.
10.2.
10.3.
10.4.
10.5.
10.6.
10.7.
10.8.
11.
11.1.
11.2.
12.
12.1.
12.2.
12.3.
13.
13.1.
13.2.
13.3.
13.4.
13.5.
13.6.
13.7.
13.8.
13.9.
13.10.
13.11.
______________________________________________________________________________________________________________
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.
14.1.
14.2.
14.3.
14.4.
14.5.
14.6.
14.7.
15.
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.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
4 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
5 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
6 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
8 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
No Modelo de Rede
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
9 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
No Modelo Hierrquico
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
10 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
No Modelo Relacional
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
11 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
13 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
1.11.
______________________________________________________________________________________________________________
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:
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
___________________________________________________________________________________________________
Onde:
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)
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)
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
___________________________________________________________________________________________________
Onde:
Exemplo:
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
19 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
Onde:
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:
Onde:
Exemplo:
______________________________________________________________________________________________________________
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.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.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
25 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
VARCHAR2(20),
"ULT_NOME"
VARCHAR2(25)
CONSTRAINT "EMP_LAST_NAME_NN"
"EMAIL" VARCHAR2(25)
CONSTRAINT "EMP_EMAIL_NN"
"NRO_TELEF"
VARCHAR2(20),
"DATA_CONTR" DATE
CONSTRAINT "EMP_HIRE_DATE_NN"
"NRO_CARGO"
VARCHAR2(10)
CONSTRAINT "EMP_JOB_NN"
"VLR_SAL"
"PERC_COMISS"
"MAT_GERENTE"
"NRO_DEPTO"
NUMBER(8,2),
NUMBER(2,2),
NUMBER(6,0),
NUMBER(4,0),
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;
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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:
, 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
___________________________________________________________________________________________________
Exemplo:
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
QT_PPLC_PAIS
------------79112800
9677000
31928519
QT_PPLC_PAIS
------------79112800
9677000
31928519
QT_PPLC_PAIS
------------79112800
9677000
31928519
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
39 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
nome
das
cidades
onde
esto
os
aeroportos
SELECT 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.
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
___________________________________________________________________________________________________
igual
menor que
menor ou igual
<>
>
>=
diferente
maior que
maior ou igual
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
___________________________________________________________________________________________________
CD_PAIS
------BR
BR
BR
SG_UF
----MG
MT
SP
NM_CIDD
----------------ARAXA
ALTA FLORESTA
ASSIS
selected.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
42 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
LIKE '%JOAO
LIKE '%JOAO%
NOT LIKE 'JOAO%'
-------------
CD_PAIS
------------BR
SE
BR
SE
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
43 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
nome
de
suas
cidades,
exceto
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
44 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
QT_PSGR+10
----------18
240
75
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
45 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
CEIL(13.2)
--------------14
CEIL(13.7)
--------------14
FLOOR(13.2)
-----------------13
FLOOR(13.7)
-----------------13
MOD(9,4)
MOD(8,4)
------------- ------------1
0
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
___________________________________________________________________________________________________
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
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
50 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13, 1999
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
51 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
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 %.
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
___________________________________________________________________________________________________
TEM RESPONSVEL
--------------431
SO RESPONSVEIS
---------------352
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
56 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
6.10.
NR_ROTA_VOO
----------159
61
399
100
160
CD_ARNV
-------TTKFF
TTKNI
TTOCY
TTKBO
TTKZI
DT_NASC_P
--------17-MAR-81
20-JAN-81
17-FEB-81
17-MAR-81
14-APR-81
04-AUG-81
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
57 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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.
Selecionar os
passageiros.
equipamentos
que
podem
transportar
entre
200
300
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.
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
*
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
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.
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.
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
___________________________________________________________________________________________________
SUM(QT_PSGR)
----------8
615
6604
3 rows selected.
6.16.
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.
NM_PAIS
QT_PPLC_PAIS
-------------------------------------- -----------ALEMANHA
79112800
ANGOLA
9677000
ANTILHAS HOLANDESAS
ARGENTINA
31928519
AUSTRALIA
16806700
AUSTRIA
7617779
BARBADOS
256000
....
61 rows selected.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
64 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
6.18.
6.18.1.
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
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
___________________________________________________________________________________________________
=
=
=
=
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
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
6.18.3.
RESPONSVEL
-------------------------------------PAULO ROBERTO DE FARIA
VALDIR CORREA DUARTE
GLORIA MARIA DO NASCIMENTO
FLAVIO DE ASSUMPCAO
CUIDADO !!!
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
68 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
6.18.4.
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
___________________________________________________________________________________________________
os
passageiros
de
seus
respectivos
RESPONSAVEL
----------------------------------
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
___________________________________________________________________________________________________
solteiros,
ou que
no
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
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
72 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
6.20.
INTERSEO DE TABELAS
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
73 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
6.21.
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.
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.
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
VO
QUAL
PASSAGEIRO
VIAJOU
COM
SEU
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
81 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
Onde:
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
efetivando
(tornando
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
85 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
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:
Onde:
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.
CREATE VIEW
AS
SELECT
10.3.
Alterando VIEWS
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
10.5.
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.
Para assegurar que nenhuma operao DML ocorra em uma view, basta usar a
clusula WITH READ ONLY.
Exemplo:
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:
Onde:
Exemplo:
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
91 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
10.8.
VIEWS em Linha
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:
Onde:
Exemplo:
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
___________________________________________________________________________________________________
FROM
11.2.
sequence_name
, min_value
, max_value
, increment_by
, last_number
user_sequences;
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
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:
Onde:
______________________________________________________________________________________________________________
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
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
Criando um procedimento
Sintaxe:
Onde:
______________________________________________________________________________________________________________
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:
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
103 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.6.
Seo de execuo:
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
104 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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.
13.9.
13.10.
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
Funes teis
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
106 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.13.
Diretrizes de Programao
MAISCULA /
MINSCULA
MAISCULA
MAISCULA
MAISCULA
MINSCULA
MINSCULA
EXEMPLOS
SELECT, INSERT
DECLARE, BEGIN, IF
VARCHAR2, DATE
v_sal, emp, salrio
nm_emp, nr_depto
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.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
108 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.16.
Cursores
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
___________________________________________________________________________________________________
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
110 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.17.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
111 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
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;
______________________________________________________________________________________________________________
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;
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
o
o
o
o
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
115 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.19.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
116 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
13.20.
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
___________________________________________________________________________________________________
Privilgios:
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:
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.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
120 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
14.4.
Privilgios de Objeto
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:
______________________________________________________________________________________________________________
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
___________________________________________________________________________________________________
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
___________________________________________________________________________________________________
Gatilho BEFORE
Gatilho AFTER
Eventos de Acionamento
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
15.6.
Tipos de gatilho:
Corpo do Gatilho:
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
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
127 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
15.9.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
128 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
15.11.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
129 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
15.12.
______________________________________________________________________________________________________________
Material preparado pelo Prof. Emerson Moraes
130 - 133
Tcnico em Informtica
Banco de Dados
___________________________________________________________________________________________________
15.14.
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.
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.
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