Beruflich Dokumente
Kultur Dokumente
DADOS
MINISTRIO DA EDUCAO
PR-REITORIA DE ENSINO
DEPARTAMENTO DE EDUCAAO DISTNCIA
ESCOLA TCNICA ABERTA DO PIAU - ETAPI
CAMPUS TERESINA CENTRAL
PRTICA DE BANCO
DE DADOS
PRESIDENTE DA REPBLICA
Luiz Incio Lula da Silva
MINISTRO DA EDUCAO
Fernando Haddad
GOVERNADOR DO ESTADO
Wellington Dias
REITOR DO INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA
Francisco da Chagas Santana
SECRETRIO DE EDUCAO A DISTNCIA DO MEC
Carlos Eduardo Bielschowsky
COORDENADORIA GERAL DA UNIVERSIDADE ABERTA DO BRASIL
Celso Costa
SECRETRIO DE EDUCAO DO ESTADO DO PIAU
Antonio Jos Medeiros
COORDENADOR GERAL DO CENTRO DE EDUCAO ABERTA A DISTNCIA
DO INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA
Elanne Cristina Oliveira dos Santos
SUPERITENDNTE DE EDUCAO SUPERIOR NO ESTADO
Eliane Mendona
ORGANIZAO DO MATERIAL DIDTICO
Claudete de Jesus Ferreira da Silva
AUTORES
Thiago Alves Elias da Silva
Ndia Mendes dos Santos
Wilson de Oliveira Jnior
Boas Vindas!
Caro (a) Cursista
Bem vindo (a) disciplina PRTICA DE BANCO DE
DADOS.
Esta a nossa Apostila, material elaborado com o
objetivo de contribuir para o desenvolvimento de seus estudos e
para a ampliao de seus conhecimentos acerca da citada
disciplina.
Este texto destinado aos estudantes aprendizes que
participam do programa Escola Tcnica Aberta do Brasil (e-Tec
Brasil), vinculado Escola Tcnica Aberta do Piau (ETAPI) do
Instituto Federal de Educao, Cincias e Tecnologia do Piau
(IFPI), com apoio da Prefeitura Municipal dos respectivos plos:
Alegrete do Piau, Batalha, Monsenhor Gil e Valena do Piau.
O texto composto de quatro (04) Captulos assim
distribudos:
Na Aula 1 Banco de Dados, conceitos, definio de
SGBD, projeto de banco de dados passando pelos modelos
conceitual e lgico.
Na Aula 2 A linguagem SQL, tipos de dados, instrues
DDL e instrues DML.
Na Aula 3
Quem sou?
THIAGO ALVES ELIAS DA SILVA
Sou Tecnlogo em Processamento de Dados pela Faculdade Piauiense de
Processamento de Dados e Engenharia Civil pela Universidade Federal do
Piau. Tenho Especializao em Anlise de Sistemas pela Universidade
Estadual do Piau e Mestrado pela Universidade Federal do Rio Grande do
Norte.
Iniciei minha atividade como docente muito jovem. Em 2001, aos 22 anos,
comecei como professor substituto do, ento, CEFET-PI e, menos de dois
anos depois, fui aprovado para o quadro de professores efetivos da mesma
instituio onde trabalho desde ento.
Em 2009, exerci a funo de coordenador do curso tcnico presencial em
Informtica do IFPI. Atualmente, sou professor das disciplinas de Banco de
Dados dos cursos tcnico e superior desta instituio e de disciplinas na
rea de IHC (Interao Humano-computador), esta ltima, foco do meu
trabalho de mestrado.
ndice Geral
Ministro
Reis
Velloso,
em
Parnaba,
Tecnlogo
em
1.1 Introduo.......................................................
1.2 pela
Dados
e Objetos de
BancododeCear,
Dados..............
Eltrica
Universidade
Federal
linha de pesquisa em
1.3 Projeto
de Desde
Banco2006,
de Dados.................
Inteligncia
Artificial.
ela professora do quadro efetivo do
1.3.1
Conceitual...................
Instituto Federal
deModelo
Cincia e
Tecnologia do Piau, Campus Angical do Piau,
na categoria 1.3.2
de Dedicao
Seus principais interesses de pesquisa
ModeloExclusiva.
Lgico...............................
so inteligncia
artificial, estrutura de dados, eletrnica digital,
2.eAatuao
LINGUAGEM
SQL................................................
microprocessadores
e linguagens de programao. E faz parte da
2.1 Introduodigitais
a SQL..............
Equipe
deTipos
Educao
Distncia
do Instituto Federal de Educao, Cincia e
2.2
de Dados
Bsicos...................
Tecnologia do Piau, atuando como tutora distncia do plo de Valena.
10
ndice Geral
11
3.1.10 Comando: WHILE...DO .................................................... 56
3.1.11 Comando: LEAVE ............................................................. 57
3.1.12 Comando: CALL ............................................................... 57
3.1.13 Comandos: RETURN e RETURNS ................................... 57
3.2 PROCEDIMENTOS (STORE PROCEDURE)..................... 58
3.3 FUNES (Function) ............................................................. 63
Gatilho e Controle de Aceso ................................................................. 70
4.1
GATILHO (TRIGGER) ....................................................... 70
4.2
CONTROLE DE ACESSO................................................. 74
4.3
PRIVILGIOS ..................................................................... 76
12
ndice de Figuras
Prtica de Banco de
Dados introduo e
projeto de banco de
dados.
1
13
Aula
Meta da Aula
Fazer
uma
introduo
da
Objetivos
14
15
Para aqueles que esto esquecidos, SGBD significa
Sistema Gerenciador de Banco de Dados e nada mais do
que um conjunto de software que tem por objetivo
administrar uma base dados, gerenciando o acesso, a
manipulao e a organizao dos dados. O SGBD prov
uma interface amigvel para o usurio de tal forma que ele
possa incluir, alterar ou consultar os dados.
16
objetos da orientao a objetos e, sim, estruturas internas de
Sistemas Gerenciadores.
Em outras palavras, a partir de agora, quando
falarmos de objetos de banco de dados em SGBDs
relacionais,
no
estaremos
nos
referindo
objetos
tais
como
tabelas,
procedimentos
divide
em
trs
etapas:
modelagem
conceitual,
17
Na modelagem lgica, buscamos transformar o
esquema conceitual para informaes tcnicas que
possam
ser
compreendidas
utilizadas
por
na
modelagem
fsica,
so
consideradas
da
empresa
levantamos
as
seguintes
informaes:
Cada funcionrio est lotado em um departamento e
em um determinado departamento poder existir vrios
funcionrios trabalhando nele. Os departamentos so
cadastrados a partir de seu cdigo, descrio e sua
localizao no prdio. O sistema precisa manter tambm os
dados de todos os funcionrios, tais como: nome e data de
nascimento. No cadastro dos projetos, deve existir seu
cdigo, que o seu identificador nico, o nome do projeto, o
oramento, a data de incio e a data prevista para a sua
concluso.
Um projeto poder ser desenvolvido por uma equipe
ou por apenas um funcionrio. Da mesma forma, um
funcionrio poder desenvolver mais de um projeto, ao
mesmo tempo ou no.
18
No ato da vinculao do funcionrio ao projeto, o
sistema deve controlar a data da vinculao, a data de
desvinculao e a funo desempenhada pelo funcionrio
naquele projeto. A escolha da funo NO est relacionada
ao departamento que o funcionrio est lotado. Para cada
funo, existe um valor de salrio mensal que poder ser
pago de forma integral ou proporcional, caso o funcionrio
no trabalhe um ms inteiro.
Quando um funcionrio se vincula a um projeto e,
aps a concluso da sua participao, este se desvincula,
ele no poder mais participar novamente do mesmo
projeto, mesmo que desempenhando uma outra funo, ou
seja, cada funcionrio s poder associar-se apenas uma
vez em cada projeto.
tambm
possuem
atributos
prprios.
19
Existem diferentes representaes para modelarmos
um banco de dados a partir do modelo entidaderelacionamento. Abaixo, seguem as representaes que
utiliza neste material.
Entidade
Atributo
NOME_ENTIDADE
NOME_ATRIBUTO
Relacionamento
Atributo Identificador
NOME
NOME_ATRIBUTO
Projeto
Departamento
Funo
20
Assim, temos o diagrama abaixo, representando o
modelo conceitual do banco de dados do sistema que
gerencia a nossa empresa de desenvolvimento de projetos:
conceitual
apresentado
na
figura
anterior,
21
Funo (cod_funcao, nome, sal)
Trabalha (cod_func, cod_proj, cod_funcao, dt_ent, dt_sai)
A partir da especificao das tabelas, poderemos
definir, no projeto lgico, as restries adicionais para cada
coluna, indicando, por exemplo, se seu preenchimento
obrigatrio ou no. Poderemos tambm especificar o tipo de
informao que ser armazenada em uma coluna, definindo
o domnio utilizado para os dados.
TABELA
COLUNA
Cod_dep
Departamento
Desc
Localiz
Cod_func
Nome
Dt_nasc
Funcionrio
DESCRIO
TIPO DE
DADOS
Cdigo do
Numrico
departamento
inteiro.
Descrio do
Cadeia de
departamento
caracteres.
Localizao do
departamento
REQUERIDO
Sim.
Sim
Cadeia de
caracteres.
Cdigo do
Numrico
funcionrio
inteiro.
Nome do
Cadeia de
funcionrio
caracteres.
Sim
Sim
Sim
Data de
nascimento do
Data.
No
funcionrio
Cdigo do
Cod_dep
departamento que
Numrico
o funcionrio
inteiro.
No
trabalha
Cod_proj
Nome
Oramento
Projeto
Dt_ini
Cdigo do
Numrico
projeto
inteiro.
Nome do projeto
Cadeia de
caracteres.
Oramento do
Nmero
projeto
Real.
Data de incio do
projeto
Sim
Sim
Sim
Data.
Sim
Data.
Sim
Data prevista
para o trmino do
Dt_prev_term
projeto
22
Cod_funcao
Cdigo da funo
Nome
Nome da funo
Funo
Numrico
inteiro.
Cadeia de
caracteres.
Sim
Sim
quem
Nmero
desempenhar a
Real.
Sim
funo
Cod_func
Cod_proj
Cdigo do
Numrico
funcionrio
inteiro.
Cdigo do
Numrico
projeto
inteiro.
Sim
Sim
Cdigo da funo
Cod_funcao
Trabalha
desempenhada
Numrico
pelo funcionrio
inteiro.
Sim
no projeto
Data de entrada
Dt_ent
do funcionrio no
Data.
Sim
Data.
No
projeto
Data de sada do
Dt_sai
funcionrio do
projeto
EXERCCIO AULA 1
1) Defina SGBD, explique qual a sua principal funo e cite, pelo
menos, 3 exemplos.
2) Quando falamos em objetos de banco de dados, estamos nos
referindo aos mesmos objetos definidos na orientao a objetos?
Explique.
3) Defina a modelagem conceitual, modelagem lgica e
modelagem fsica.
4) Modele, a partir do modelo entidade-relacionamento, o banco de
dados de um sistema que controlar uma clnica mdica. Nesta
clnica, devero ser cadastrados todos os mdicos, alm de suas
especialidades. Mesmo que o mdico possua mais de uma
especialidade, ele dever escolher apenas uma delas para trabalhar
na clnica. Todos os pacientes tambm devero ser cadastrados
com todos os seus dados. Os dados das consultas devero ser
armazenados tambm no banco de dados: a data em que a consulta
aconteceu, o mdico que atendeu o paciente, bem como o
diagnstico feito pelo mdico.
2
23
A Linguagem SQL
Principais Comandos
Aula
Meta da Aula
Conhecer as principais instrues
Objetivos
24
A LINGUAGEM SQL
2.1) INTRODUO A SQL:
Structured Query Language, ou
Linguagem de
Sabia
O
SQL
foi
desenvolvido
originalmente
no
incio dos anos 70 nos
laboratrios da IBM
em San Jose, dentro do
projeto System R, que
tinha por objetivo
demonstrar
a
viabilidade
da
implementao
do
modelo
relacional
proposto por E. F.
Codd. O nome original
da linguagem era
SEQUEL, acrnimo
para
"Structured
English
Query
Language"
(Linguagem
de
Consulta Estruturada
em Ingls), vindo da
o fato de, at hoje, a
sigla, em ingls, ser
comumente
pronunciada "squel"
ao invs de "s-ki-l",
letra a letra. No
entanto, em portugus,
a pronncia mais
corrente a letra a
letra: "se-qu-le".
Fonte: Wikipdia
se
tornar
SQL:1999
(SQL3)
SQL:2003,
como
dito
anteriormente,
SQL, embora
diferentes fabricantes de
25
linguagem pode ser migrada de plataforma para plataforma
sem mudanas estruturais principais.
As instrues da linguagem SQL podem ser divididas
em dois grandes grupos: Linguagem de Manipulao de
Dados (LMD ou Data Manipulation Language DML) e a
Linguagem de definio de dados (LDD ou Data Definition
Language DDL). A DML trata dos comandos de
Voc Sabia que...
Os vrios fornecedores
de
Sistemas
Gerenciadores
de
Banco
de
Dados
utilizam
variaes
prprias dos tipos de
dados definidos na
SQL:2003.
No Oracle, o tipo de
dados mais utilizado
para tratamento de
informaes
numricas o tipo
NUMBER. J no SQL
SERVER 2005 e no
DB2 verso 9, so
utilizados vrios tipos
de
dados
para
armazenamento
de
informaes
numricas,
com
denominaes
bem
prximas do padro
SQL.
No que se refere a
tipos
de
dados
referentes a cadeias de
caracteres,
os
principais
gerenciadores
de
banco
de
dados
comerciais
se
aproximam bastante
do
padro
da
linguagem.
Fonte: Costa (2006)
Descrio
Caractere de tamanho fixo usualmente conhecido
como CHAR
Caractere de tamanho variante usualmente
conhecido como VARCHAR
Caractere longo usualmente conhecido como
CLOB
String binria para objetos longos usualmente
conhecido como BLOB
Numrico exato
Numrico exato
Numrico exato
Numrico exato
Numrico exato
Numrico aproximado
Numrico aproximado
Numrico aproximado
Booleano
Data com informaes de dia, ms e ano
Hora com informaes de hora, minuto e segundo
Determina um momento, com informaes de ano,
ms, dia, hora, minuto e segundo
26
2.3) O COMANDO CREATE DATABASE:
A instruo Create Database, como o prprio nome
sugere, serve para criarmos a base de dados na qual as
tabelas ser criadas.
Sua sintaxe bastante simples. Vejamos, atravs de
exemplo, a criao de uma base de dados chamada
PraticaBD.
comando
Create Table
permite
criarmos
Onde:
nome-tabela representa o nome da tabela que ser
criada.
nome-coluna representa o nome da coluna que ser
criada. A definio das colunas de uma tabela feita
relacionando-as uma aps a outra.
tipo-do-dado define o tipo e tamanho dos campos
definidos para a tabela.
27
NOT NULL exige o preenchimento do campo, ou seja,
no momento da incluso obrigatrio que possua um
contedo.
NOT NULL WITH DEFAULT preenche o campo com
valores pr-definidos, de acordo com o tipo do campo, caso
no seja especificado o seu contedo no momento da
incluso do registro.
CONSTRAINT nome PRIMARY KEY (nome-colunachave) defini para o banco de dados a coluna que ser a
chave primria da tabela. Caso ela tenha mais de uma
coluna como chave, elas devero ser relacionadas entre os
parnteses e separadas por vrgulas.
CONSTRAINT nome FOREIGN KEY (nome-colunachave-estrangeira) REFERENCES nome-tabela-pai (nomecampo-pai) defini para o banco de dados as colunas que so
chaves estrangeiras, ou seja, os campos que so chaves
primrias de outras tabelas. Na opo REFERENCES deve
ser especificado a tabela na qual a coluna a chave
primria.
ON DELETE especifica os procedimentos que devem
ser feitos pelo SGBD quando houver uma excluso de um
registro
na
tabela
pai
quando
existe
um
registro
28
Antes de iniciarmos a criao das tabelas do nosso
estudo de caso, vale ressaltar que a ordem de criao
dessas tabelas de suma importncia. Isso se deve ao fato
das tabelas estarem conectadas atravs de suas chaves
primrias e estrangeiras. Vamos explicar de uma maneira
diferente. Sabemos, por exemplo, que a tabela Funcionrio
recebe, como chave estrangeira, a chave primria da
tabela
departamento.
Assim,
caso
tentssemos
criar
chave
primria
da
tabela
Conforme
observamos,
tabela
29
A prxima tabela que criaremos ser a tabela
Funcionrio.
Ateno
Perceba que, de
acordo com a sintaxe
de
criao
das
tabelas,
no
obrigatrio que as
chaves primrias e
estrangeiras tenham
o mesmo nome.
Usando
como
exemplo as tabelas
Funcionrio
e
Departamento,
observe
que
o
atributo cod_dep da
tabela
funcionrio
no precisaria ter o
mesmo nome do
atributo cod_dep da
tabela
Departamento. Isso
s possvel por
que,
durante
a
declarao da chave
estrangeira, dizemos
explicitamente com
qual
atributo
devemos conectar o
atributo cod_dep da
tabela Funcionrio.
30
Por fim, apresentamos a criao da tabela Trabalha.
Esta tabela, obrigatoriamente, deveria ser a ltima tabela a
ser criada no nosso banco de dados. Isso se deve ao fato
desta tabela receber, como chaves estrangeiras, atributos
oriundos das tabelas Funcionrio, Projeto e Funo.
Onde:
nome-tabela representa o nome da tabela que ser
atualizada.
31
nome-coluna representa o nome da coluna que ser
criada.
tipo-do-dado a clusula que define o tipo e tamanho
dos campos definidos para a tabela.
DROP nome-coluna realiza a retirada da coluna
especificada na estrutura da tabela.
ADD nome-coluna tipo-do-dado realiza a incluso da
coluna especificada na estrutura da tabela. Na coluna
correspondente a este campo nos registros j existentes
ser preenchido o valor NULL (Nulo). As definies NOT
NULL e NOT NULL WITH DEFAULT so semelhantes do
comando CREATE TABLE.
MODIFY
nome-coluna
tipo-do-dado
permite
32
33
2.6) O COMANDO DROP TABLE:
O comando Drop Table serve para destruirmos uma
tabela. Se, por exemplo, precisssemos destruir a tabela
trabalha, usaramos o comando abaixo.
teramos
que
lembrar
que
tabela
atributo
cod_dep
como
chave
estrangeira.
Para
um
banco
de
dados,
34
A sintaxe bsica da instruo Select a seguinte:
Onde:
lista_atributos representa, como o nome sugere, a
lista dos atributos que se deseja apresentar no resultado da
consulta.
nome-tabela representa o nome da(s) tabela(s) que
contem as colunas que sero selecionadas ou que sero
utilizadas para a execuo da consulta.
Apelido representa os nomes que sero usados como
nomes de tabelas em vez dos nomes originais. A vantagem
desse recurso que, em casos de consultas muito grandes,
com a utilizao de apelidos, digitamos menos.
condio representa a condio para a seleo dos
registros. Esta seleo poder resultar em um ou vrios
registros.
Para
melhor
entendermos
esta
instruo,
35
II Obter o nome e a data de nascimento do
funcionrio de cdigo 2:
2.7.1) Subconsultas:
Realizar subconsultas uma forma de combinar mais
de uma consulta (select) obtendo apenas um resultado.
Vamos apresentar exemplos como forma de explicar
o assunto:
Imagine que precisamos obter o nome de todos os
funcionrios
que
esto lotados
no departamento de
36
2.8) MANIPULANDO DADOS DE UMA TABELA (INSERT,
UPDATE, DELETE):
Como dissemos anteriormente, na linguagem SQL
existem instrues para definio de dados (DDL), e
instrues para manipulao de dados (DML). Conhecemos,
at agora, alguns comandos DDL e, nas prximas pginas,
conheceremos
instrues
de
manipulao.
So
elas;
Onde:
nome-tabela representa o nome da tabela onde ser
includa o registro.
nome-coluna representa o nome da(s) coluna(s) que
tero contedo no momento da operao de incluso. Obs:
esta relao opcional.
Relao dos valores representa os valores a serem
includos na tabela.
Existem trs observaes importantes para fazermos
sobre este comando. Vamos coment-las a partir de
exemplos.
Vejamos o primeiro exemplo:
37
que, aps o nome da tabela departamento, no colocamos a
lista com o nome das colunas que seriam povoadas. Isso
possvel, porm temos que, obrigatoriamente, inserirmos as
informaes das colunas da tabela na mesma ordem em que
elas foram criadas. No nosso caso, primeiro o cdigo do
departamento, depois a descrio e, por fim, a sua
localizao.
Vejamos um segundo exemplo:
quando
executarmos
esta
instruo.
Apelido
Data_nasc
Cod_setor
Nome_me
100
Joozinho
01/01/1980
Francisca
38
200
Maricota
02/02/1979
Raimunda
300
Franz
03/03/1978
Joanete
Onde:
nome-tabela representa o nome da tabela cujo
contedo ser alterado.
nome-coluna representa o nome da(s) coluna(s) tero
seus contedos alterados com o novo valor especificado.
39
condio representa a condio para a seleo dos
registros que sero atualizados. Este seleo poder
resultar em um ou vrios registros. Neste caso a alterao
ir ocorrer em todos os registros selecionados.
Vejamos os exemplos abaixo:
ns
no
poderamos
simplesmente
deletar
40
projetos, caso estes ainda estivessem sendo referenciados
pela tabela Trabalha.
de
informaes
que
41
2.9.2) Funo Avg( ):
A funo AVG responsvel por extrair a mdia
aritmtica dos valores de uma coluna.
Por exemplo, se precisssemos calcular a mdia dos
oramentos de todos os projetos, executaramos o seguinte
comando:
42
Cod_proj
Cod_funcao
Dt_ent
Dt_sai
2010-02-02
2010-03-03
2010-02-02
2010-03-03
2010-04-04
2010-05-05
2010-04-04
2010-05-05
2010-02-02
2010-03-03
projeto
trabalharam
2.
Perceba
no
projeto
tambm que
funcionrios
funcionrios
apenas
43
trabalharam nele? Na realidade, o que estamos buscando
est representado na tabela abaixo:
Cod_proj
Quantidade_funcionrios
44
estrangeira da outra tabela que compe a juno. Esta ser
a condio de ligao entre as tabelas.
Existem vrios tipos de junes, cada uma delas
variando a forma que cada tabela se relaciona com as
demais.
Antes de iniciarmos o estudo dos diferentes tipos de
junes,
consideremos
as
tabelas
Funcionrio
Nome
Dt_nasc
Cod_dep
Joo
1980-01-02
Jos
1981-02-03
Maria
1982-05-04
Antnio
1983-07-06
FUNCIONRIO
Cod_dep
Descr
Localiz
Desenvolvimento
Sala C3-10
Anlise
Sala B2-30
Testes
Sala C1-10
Contabilidade
Sala A1-20
DEPARTAMENTO
45
O comando anterior apresentaria como resultado, a
partir das tabelas propostas anteriormente, a seguinte
relao resultante:
Nome
Descr
Joo
Desenvolvimento
Jos
Anlise
Maria
Desenvolvimento
Antnio
Testes
Observe,
no
comando
apresentado,
que
46
2.11.2) Junes Externas (Outer Join):
Na juno externa, os registros que participam do
resultado da juno no obrigatoriamente obedecem
condio de juno, ou seja, a no inexistncia de valores
correspondentes no limita a participao de linhas no
resultado de uma consulta.
Existem
tipos
diferentes
de
juno
externa.
Nome
Desenvolvimento
Joo
Desenvolvimento
Maria
Anlise
Jos
Testes
Antnio
Contabilidade
Perceba que, como a tabela Departamento foi
colocada esquerda da juno, foi apresentada a listagem
completa de todas as descries de departamento e, quando
havia alguma associao de uma descrio com um
47
funcionrio, este era apresentado. Observe que ningum
est lotado no departamento de contabilidade, logo ningum
aparece associado a este departamento na tabela anterior.
EXERCCIO AULA 2
1) A partir da linguagem SQL, construa uma base de dados
chamada Clnica e, dentro dela, crie as tabelas da quarta questo da
aula anterior, com suas respectivas chaves primrias e chaves
estrangeiras.
2) A partir do banco de dados da questo anterior e utilizando a
linguagem SQL, responda as questes abaixo:
a) Altere a tabela mdico, adicionando a coluna
nome_cnjuge.
b) Insira, pelo menos, dois registros em cada uma das
tabelas.
c) Delete um registro da tabela especialidade. Obs:
mantenha a integridade referencial.
d) Obtenha o nome do paciente mais velho.
e) Para cada CRM de mdico, obtenha a quantidade de
consultas relacionadas a ele.
f) Obter o nome do(s) mdico(s) que atendeu o paciente de
nome Joo.
g) Para cada nome de mdico, obtenha a quantidade de
consultas relacionadas a ele.
Procedimentos
e Funes
3
48
Aula
Meta da Aula
Apresentar os procedimentos e funes na
linguagem SQL.
E sua implementao no
Objetivos
MySQL
49
Procedimento e Funo
3.1
50
negcio sejam disponibilizadas para todas as aplicaes que
acessam o SGBD.
Iniciaremos nosso estudo em SQL/PSM no MySQL,
desde os blocos de comando at a elaborao das funes
(function),
procedimentos (store procedure), gatilhos
(triggers) e ainda controle de acesso de usurio.
Vamos aprender a sintaxe, dos comandos para que
possamos programar no MySQL.
3.1.1 COMANDO: BEGIN ... END
As palavras-reservas BEGIN e END atuam como
delimitadoras de um bloco de comandos, na criao de
programas SQL. Os blocos de comandos so programas
compostos por uma ou mais instrues escritas em SQL.
Essas mesmas instrues BEGIN... ENG tambm podem
aparecer aninhadas. Temos a estrutura de um bloco de
comandos em SQL, a seguir:
BEGIN
[DECLARAO DE VARIVEIS];
[DECLARAO DE CURSORES];
COMANDOS SQL;
COMANDOS SQL;
END
51
linhas entre um conjunto de resultados e alm de obter o
nmero de linhas afetadas por um INSERT, UPDATE ou
DELETE numa consulta no MySQL. E ainda recupera
mensagens de erros associadas ltima consulta no
MySQL que no chegou a ser finalizada devido a uma falha
interna qualquer.
O comando DECLARE segue a precedncia, assumida
pelo MySQL, que determinar que os cursores devem ser
declarados antes dos handlers, e as variveis e condies,
antes dos cursores.
Sintaxe do comando DECLARE para declarar varivel:
DECLARE <nome da varivel> <tipo de dados>;
Sintaxe
condio:
do
comando
DECLARE
para
declarar
52
O smbolo de atribuio o = (igual) que no MySQL,
tambm pode ser usado como o operador que representa a
igualdade de valores.
As variveis no precisam ser inicializadas. Elas
contm o valor NULL por padro e podem armazenar
valores numricos (inteiro ou real), string (seqncia de
caracteres) ou data e hora.
Sintaxe do comando SET:
SET <nome da varivel> = <valor a ser atribudo>;
53
54
abaixo:
3.1.6 - COMANDO: IF
A estrutura de deciso permite executar um entre
dois ou mais blocos de instrues. No MySQL, temos a
estrutura de deciso IF, ele testa se uma condio
verdadeira ou falsa, se for verdadeira executa um conjunto
de comandos.
Sintaxe do comando IF:
IF <condio> THEN
<comandos SQL>;
<comandos SQL>;
[ELSE IF <condio> THEN <comandos SQL>;
<comandos SQL>;]...
[ELSE <comandos SQL>;<comandos SQL>;
END IF;
55
A Sintaxe do comando CASE...WHEN, tambm pode
ser a seguinte:
CASE
WHEN <valor da pesquisa1> THEN <comandos SQL>;
WHEN <valor da pesquisa2> THEN <comandos
SQL>;]...
[ELSE <comandos SQL>;]
END CASE;
56
57
3.1.11 COMANDO: LEAVE
Esse comando utilizando para sair de uma
estrutura de controle, seja de repetio (REPEAT, WHILE,
LOOP, ITERATE) ou deciso (IF, CASE).
Sintaxe do comando LEAVE:
LEAVE <nome do label>;
OBSERVAO: o label pode ser o nome de uma funo,
ou
CALL <nome-procedimento> ();
58
Sintaxe do comando RETURN:
RETURN <valor de varivel>;
O MySQL reconhece
store
procedure
(procedimentos
armazenados), na nossa
apostila, vamos nos
referir a eles somente
como procedimentos.
um
cdigo
procedural,
semelhante ao utilizado em linguagens estruturadas, s que
ao invs de ter que escrever seus prprios comandos SQL
na aplicao, voc cria o procedimento (store procedure) no
59
Ateno!!
Agora a hora de usar
o comando CALL,
toda vez que quiser
executar um
procedimento
precisamos utilizar
esse comando.
60
retornam um simples valor: pode ser o total
de registros de uma tabela;
no retorna valor (realiza uma ao): pode
ser a insero
J que entendemos, o que um procedimento, sua
sintaxe :
Onde:
nome-do-procedimento representa o nome do
procedimento que ser criado.
Os trs tipos de parmetros que pode ser utilizados
nos procedimentos so:
IN: um parmetro de entrada, ou seja, um
parmetro cujo seu valor seu valor ser utilizado
no interior do procedimento para produzir algum;
OUT: um parmetro de sada, retorna algo de
dentro do procedimento, colocando os valores
manipulados disponveis na memria ou no
conjunto de resultados;
INOUT: faz o processamento dos IN ou OUT
simultaneamente.
A caracterstica DETERMINISTIC diz que o
procedimento sempre retorna o mesmo resultado para os
mesmos parmetros de entrada, e a caracterstica NOT
DETERMINISTIC determina o contrrio da caracterstica
deterministc. Atualmente, essas caractersticas so aceitas,
pela MySQL, mas ainda no usada.
Temos a caracterstica que informa o modo de
tratamentos dos dados durante a execuo do
61
Ateno!!
A clusula IF
EXISTS, do comando
DROP
PROCEDURE OU
FUNCTION uma
extenso do MySQL.
Ela previne que um
erro ocorra se a funo
ou o procedimento no
existe mais no SGBD.
Um aviso produzido
e pode ser visualizado
SHOW
62
Para resolver estes problemas, vamos utilizao dos
procedimentos abaixo.
63
Onde:
nome-do-procedimento representa o nome do
procedimento que ter sua(s) caracterstica(s) alterada(s).
O comando ALTER PROCEDURE no muito
utilizado no MySQL, uma vez que no se pode alterar nem
os parmetros nem o corpo do procedimento. Caso, se
queira fazer muitas modificaes no procedimento,
recomenda-se apagar o procedimento e criar um novo.
A seguir, vamos aprender como remover uma funo:
DROP PROCEDURE nome-do-procedimento [IF EXISTS]
nome_warning
Onde:
nome-do-procedimento representa o nome do
procedimento que ter removido do servidor de banco de
dados.
Veremos, a seguir, como remover os trs
procedimentos que foram criados no MySQL:
Curiosidade!!
Para saber todas as
informaes sobre as
funes do SGBD,
podemos usar o
comando SHOW
FUNCTION STATUS e
SHOW PROCEDURE
STATUS, para os
procedimentos.
64
servidor do banco de dados. Dessa maneira, uma funo
que venha a ser padronizada no banco de dados, por ser
executada por aplicaes diferente, seja desenvolvida em
Delphi, Java, C.
Ento, funo so programas armazenados no SGBD,
pr-compilados, invocados de forma explcita para executar
alguma lgica de manipulao de dados, e que sempre
retorna algum valor.
A diferena bsica entre o procedimento e uma funo
que a funo sempre retorna algum valor.
J que entendemos, o que uma funo, sua sintaxe
:
CREATE FUNCTION nome-da-funo ([parmetros[,...]])
[RETURNS tipo]
BEGIN
[caractersticas ...] corpo da funo
parmetros:nome do tipo do parmetro
tipo:
Qualquer tipo de dado vlido no MySQL
caractersticas:
Linguagem SQL
| [NOT] DETERMINISTIC
| {CONTAINS SQL | NO SQL | READS SQL DATA |
MODIFIES
DATA } Create Function
Quadro SQL
24 Comando
| SQL SECURITY {DEFINER | INVOKER}
Onde:
| COMMENT string
65
da funo, e o corpo da funo deve conter uma instruo
RETURN e o valor de retorno.
Depois que, aprendemos a sintaxe da funo, vamos
ver alguns exemplos de funes, implementadas no MySQL,
do nosso banco de dados praticabd, utilizado desde o incio
da nossa apostila.
Antes de elaborar as funes, temos que ter como
objetivos, cri-las de forma que elas possam trazer algum
tipo utilizao, realmente prtica, para empresa ou
organizao, na qual forem implementadas.
Caso cada departamento, queira saber a classificao
dos projetos de acordo com o seu oramento, a funo est
exemplificada a seguir:
66
Onde:
nome-da-funo representa o nome da funo que ter
sua(s) caracterstica(s) alterada(s).
Esse comando no muito utilizando, uma vez que
no se pode alterar os parmetros ou o corpo da funo.
Caso se queira alterar, o cdigo de uma funo o ideal
remov-la e criar uma nova funo. A seguir, vamos
aprender como remover uma funo.
Portanto, para finalizar o nosso estudo sobre funo,
podemos deletar essa rotina do SGBD, para isso usamos a
sintaxe, abaixo:
DROP FUNCTION nome-da-funo [IF EXISTS] nome_warning
Onde:
nome-da-funo representa o nome da funo que ter
removida do servidor de banco de dados.
Teremos, a seguir, a remoo das funes criadas no
MySQL.
67
68
RESUMO DO CAPTULO
69
Gatilho e Controle de
Acesso
Aula
Meta da Aula
Apresentar os gatilhos e controle de acesso
na linguagem SQL. E implementas gatilhos e
Objetivos
70
GATILHO (TRIGGER)
A linguagem SQL alm de tratar os procedimentos e
funes, tambm permite a criao de gatilhos (triggers).
considerado uma lgica
de
processamento
procedural,
armazenada
no
SGBD e disparada
automaticamente pelo servidor sob condies especficas.
Gatilhos (triggers)
representam
regras
do mundo
(negcio) que definem a integridade ou consistncia do BD.
Passaram a ser padro SQL em 1999. Seu principal
objetivo monitorar o SGBD e realizar alguma ao
quando uma condio ocorre.
Os gatilhos (triggers) devem ser armazenados na
base de dados como objetos independentes e no
podem ser locais a um bloco ou pacote. So na
verdade, procedimentos disparados automaticamente pelo
SGBD em resposta a um evento especfico do banco de
dados. Portanto, so bastante semelhantes aos
procedimentos (store procedure) s que tem sua execuo
disparada
pelo
SGBD
quando
ocorre
um
acontecimento/evento desencadeador de trigerring suceder
e no aceita argumentos. O ato de executar um gatilho
(trigger) conhecido como disparar o gatilho (trigger). O
evento desencadeador pode ser uma operao DML
(INSERT, UPDATE, ou DELETE) em uma tabela da base
de dados.
Os gatilhos (triggers) podem usados para:
Segurana sobre a base de dados, e ao de
usurios, verificando quando uma operao
realizada sobre uma entidade, o gatilho (trigger)
disparado para verificar as permisses do usurio;
Melhorar a segurana no acesso aos dados;
Assegurar as restries de integridade;
Fazer a auditoria das informaes de uma tabela,
registrando as alteraes efetuadas e quem as
efetuou;
Sinalizar automaticamente a outros programas que
necessrio efetuar uma ao, quando so efetuadas
alteraes numa tabela.
A seguir so enumeradas algumas vantagens no uso
de gatilhos (triggers):
Um gatilho (trigger) sempre disparado quando o
evento ocorre, evitando assim esquecimentos ou falta
de conhecimento sobre o banco de dados;
71
So adminstrados de forma centralizada, ou seja, o
DBA (Adminstrador de Banco de Dados) define suas
situaes, eventos e aes;
A ativao central combina com o modelo
cliente/servidor, portanto a execuo da trigger
realizada no servidor, independente do aplicativo
executado pelo cliente.
Com o uso de gatilho (trigger) procura-se eliminar o
esforo manual e repetitivo de identificar e corrigir comandos
e regras mal implementados, com baixo desempenho.
Assim, o desenvolvedor da aplicao sair ganhando em
produtividade, uma vez que no ir mais perder seu tempo
em corrigir e buscar regras j prontas e controladas no
SGBD.
Por se tratar de mecanismo ativos, os gatilhos
(triggers), utilizam como requisitos para sua elaborao, o
paradigma Evento-Condio-Ao (ECA). Onde o
Evento, indica o momento do disparo da regra, a
Condio precisa ser satisfeita para que a execuo do
gatilho (trigger) prossiga e a Ao determina o que ter de
ser feito, caso a condio seja realmente vlida.
H trs tipos principais de gatilhos (triggers): DML,
insted-of e gatilhos (triggers) de sistema (DDL).
Um gatilho (trigger) DML acionado em uma
operao INSERT, UPDATE ou DELETE de uma
tabela de dados. Ele pode ser acionado antes ou
depois que a instruo executada e pode ser
acionado uma vez por linha problemtica ou uma
vez por instruo;
72
principal, um gatilho (trigger) aplica a mesma modificao na
cpia.
Cada SGBD utiliza sua prpria linguagem e sintaxe
para gatilhos (triggers). Iremos aprender agora, como
elaborar gatilhos (trigger) no MySQL. Importa ressaltar que
iremos nos ater aos gatilhos (triggers) DML.
J que aprendemos o que um gatilho (trigger), sua
sintaxe a seguir:
CREATE TRIGGER nome-do-gatilho momento-da-execuo
evento-disparador
ON nome-da-tabela FOR EACH ROW comandos vlidos no
SQL OU
BEGIN
corpo do gatilho:
comandos vlido no SQL
Onde:
nome-do-gatilho representa o nome do gatilho (trigger)
que ser criado;
momento-da-execuo diz em que tempo a ao
ocorrer, antes (BEFORE) ou depois (AFTER) do evento;
evento-disparador representa o evento que dispara o
gatilho (trigger), so os comandos INSERT, UPDATE e
DELETE do SQL;
nome-da-tabela diz o nome da tabela que ser utilizado
pelo gatilho (trigger);
Para um melhor entendimento do que seja o momento
da execuo e um evento-disparador durante a execuo de
um gatilho (trigger), observemos a Tabela 1, a seguir:
Tipo de Gatilho
Descrio
BEFORE INSERT
BEFORE UPDATE
BEFORE DELETE
AFTER INSERT
AFTER UPDATE
AFTER DELETE
73
possvel combinar alguns dos modos, desde que
tenham a operao de AFTER ou BEFORE em comum,
conforme mostra a Tabela 2, abaixo:
Tipo de Gatilho
Descrio
BEFORE INSERT ou
UPDATE ou DELETE
74
Para finalizar o nosso estudo sobre gatilho (trigger),
iremos verificar como deletar um gatilho (trigger), sintaxe :
DROP TRIGGER nome-do-gatilho [IF EXISTS]
nome_warning
Onde:
nome-do-gatilho representa o nome do gatilho que ter
removido do servidor de banco de dados.
Teremos, a seguir, a remoo dos gatilhos que foram
criados no MySQL.
Para
listarmos
todos
os
gatilhos
(triggers)
armazenados no MySQL, temos que utilizar a sintaxe a
seguir:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;
4.2
CONTROLE DE ACESSO
A integridade do sistema de Banco de Dados depende
muito do tipo de segurana implementado ao SGBD. Para
isso existe um DBA (Administrador de Banco de Dados)
responsvel pela segurana e controle de acesso a esse
banco de Dados. Por isso, iremos estudar como implementar
o controle de acesso e melhorar a segurana no MySQL.
Quando iniciamos os trabalhos em um servidor
MySQL, normalmente precisamos de uma identidade e uma
senha. Essa identidade o que vai fazer com que o MySQL
reconhea o usurio. Cabe portanto ao DBA (Administrador
de Banco de Dados) criar os usurios que podero usar o
MySQL,
podendo tambm renome-los e remov-los
permanentemente do SGBD.
A sintaxe para criar um usurio :
CREATE USER usurio [IDENTIFIED BY[PASSWORD]]
'senha';
Onde:
usurio representa o nome do usurio que ser criado;
75
'senha' representa a senha de acesso ao MySQL pelo
usurio criado.
Teremos, a seguir, a criao de um usurio no MySQL:
76
Curiosidade!!
Existem mais privilgios
que deve ser concedido
apenas a
administradores, so
eles o REPLICATION
CLIENT,
REPLICATION
SLAVE, SUPER,
CREATE USER,
DROP USER,
RENAME USER.
Os privilgios so
armazenados em quatro
tabelas interna, no
banco MySQL, a saber:
mysql.user: privilgios
globais aplicam-se para
todos os banco de dados
em um determinado
servidor; mysql.db:
privilgios de banco de
dados aplicam-se a
todas as tabelas em um
determinado banco de
dados.
mysql.tables_priv:
privilgios de tabelas
que aplicam-se a todas
as colunas em uma
determinada tabela.
mysql.colums_priv:
privilgios de colunas
aplicam-se a uma nica
coluna em uma
determinada tabela.
PRIVILGIOS
77
O privilgio GRANT OPTION permite que um usurio
possa fornecer a outros usurios os privilgios que ele
mesmo possui.
Os privilgios RELOAD, SHUTDOWN, PROCESS,
FILE e ALL so usados para operaes administrativas que
so realizadas pelo DBA (Administrador do Banco de
Dados).
No MySQL, ou em qualquer SGBD, o ideal conceder
privilgios somente para usurios que realmente
necessitem, por isso deve-se ter muito cuidado ao conceder
certos privilgios. Por exemplo, o privilgio GRANT OPTION
permite que usurios possam repassar seus privilgios a
outros usurios, portanto dois usurios com diferentes
privilgios e com privilgio GRANT OPTION conseguem
combinar seus privilgios, o que pode ser um risco numa
organizao, dependo do tipo de privilgio cedido a cada
usurio desses. O privilgio ALTER pode ser usado para
subverter o sistema de privilgios, quando o usurio pode
renomear todas as tabelas do banco de dados.
Aps o entendimento, do que sejam os privilgios,
vamos v como atribuir os privilgios a um usurio sua
sintaxe :
GRANT privilgios [(coluna)] [, privilgio
[(coluna)] ...]
ON {nome_tabela funo - procedimento | * | *.* |
nome_banco.*}
TO nome_usuario [IDENTIFIED BY senha]
[, nome_usuario [IDENTIFIED BY senha] ...]
[WITH GRANT OPTION]
Onde:
privilgios: representa qual privilgio ser concedido.
colunas: opcional e especifica as colunas a que os
privilgios se aplicam. Pode ser uma nica coluna ou vrias
separadas por vrgula;
nome-tabela, funo ou procedimento, *, *.* ,
nome_banco.*: o banco de dados, tabela, funo ou
procedimento a que os privilgios se aplicam. Pode ser
especificado como: *.* neste caso os privilgios aplicam-se
a todos os bancos de dados; * os privilgios aplicam-se se
no estiver utilizando nenhum banco de dados em particular;
nome_banco.*- neste caso, os privilgios aplicam-se a todas
as tabelas do banco; banco.tabela neste caso os
privilgios aplicam-se a uma determinada tabelas. Voc
pode, ainda especificar alguma(s) coluna(s) sem particular
inserindo esta(s) em colunas;
nome-usurio: especifica um usurio do MySQL. Para
preservar a segurana este usurio no deve ser o mesmo
usurio do sistema;
78
senha: senha do usurio para acessar o servidor
MySQL;
WITH GRANT OPTION: se for especificado, o usurio
poder conceder privilgios a outros usurios.
Vejamos, a seguir, alguns exemplos de privilgios
concedidos a alguns usurios.
Nesse primeiro exemplo, temos a concesso de todos
os privilgios ao usurio aluno_E_A_D, incluindo o privilgio
que permite que o usurio possa conceder privilgios a
outros usurios, sintaxe a seguir:
Onde:
privilgios: representa qual privilgio ser removido;
colunas: opcional e especifica as colunas a que os
privilgios sero removidos. Pode ser uma nica coluna ou
vrias separadas por vrgula;
nome-tabela, *, *.* , nome_banco.*: o banco de dados ou
tabela a que os privilgios se aplicam. Pode ser especificado
como: *.* neste caso os privilgios sero removidos de
todos os bancos de dados; * os privilgios removidos
aplicam-se se no estiver utilizando nenhum banco de dados
79
em particular; nome_banco.*- neste caso, os privilgios
removidos aplicam-se a todas as tabelas do banco;
nome-usurio: especifica um usurio do MySQL que
ter seus privilgios removidos;
Ou:
ALL PRIVILEGES: para remover todos privilgios do
usurio;
GRANT OPTION: para remover o privilgio do usurio
de conceder privilgio a outros usurios;
nome-usurio: especifica um usurio do MySQL que
ter seus privilgios removidos;
Temos a seguir, a remoo dos privilgios do usurio
aluno_E_A_D. Esse usurio tinha como privilgios manipular
as operaes de SELECT, INSERT, UPDATE e DELETE, no
banco de dados praticabd, a sintaxe :
80
RESUMO DO CAPTULO
Referncias