curso de ciência da computação - ricardobarcelar.com.br - fb.pdf · patterns –especificação...
TRANSCRIPT
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
MATÉRIA: Banco de Dados II
ASSUNTO: Stored Procedures (Procedimentos Armazenados)
PROFESSOR: Ricardo Rodrigues Barcelar
Curso de Ciência da Computação
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
Apresentar a linguagem Structured Query Language (SQL);
Utilizar stored procedures em sistemas de banco de dados.
Objetivos:
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
1. Introdução
2. Vantagens do uso de Stored Procedures
3. Criação da Stored Procedure
4. Comandos extras
5. Manipulando Stored Procedure
7. Fonte de pesquisa
Agenda:
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
Nas sessões anteriores foi visto o comando SELECT mais recentemente a
utilização de Visões e seus detalhes.
Nesta sessão veremos a utilização de Stored Procedures (Procedimentos
Armazenados), na automatização de procedimentos no banco de dados.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
gravadora
CP grav_id
grav_nome
grav_tel
grav_contato
cd
CP cd_id
cd_nome
cd_preco_venda
cd_dt_lancamento
CE1 grav_id
item_cd
CP,CE2 cd_id
CP,CE1 mus_id
item_faixa
musica
CP mus_id
mus_nome
mus_duracao
mus_autor
CP,CE1 mus_id
CP,CE2 aut_id
autor
CP aut_id
aut_nome
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
STORED PROCEDURES (SP)
É um programa escrito numa linguagem própria que é armazenado como parte
do banco de dados.
VANTAGENS DO USO DE STORED PROCEDURES?
Redução de tráfico de rede.
Aumenta a performance da aplicação, particularmente em uma WAN ou em uma
conexão de baixa velocidade.
Utilizando SP, elimina-se o processo de “parsed”, ou seja da query ter que ser
analisada gramaticalmente, submetido ao optimizador para formulação de um plano
de execução.
SP são analisadas, optimizadas e armazenadas em uma forma executável no
momento em que são adicionadas ao banco de dados.
É possível executar operações muito mais complexas que uma simples query.
Pode ser usada por aplicações distintas.
Facilita a mnt, pois é possível alterar a SP sem ter que recompilar a App.
Proporciona mais segurança ao BD, acessando tabelas que o usuário não pode.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
QUANDO USAR STORED PROCEDURES
Sempre que puder!
Não existem desvantagens em usar SP, entretanto existes duas limitações:
vc tem que ser capaz de passar qualquer informação variável para a SP
(parâmetros).
Operações complexas podem ser limitadas.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
CRIAÇÃO DA STORED PROCEDURE
Para criar uma SP, utilizamos o comando CREATE PROCEDURE:
SINTAXE:
CREATE PROCEDURE nome
<parâmetros de entrada>
RETURNS
<parâmetros de saída>
AS
<declaração das variáveis locais>
BEGIN
<comandos da procedure>
END
Parâmetro de entrada são usados para passas os valores que serão usado para
modificar o comportamento da SP.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
Parâmetro de saída ou de retorno é o meio pelo qual a SP retorna informações
para a aplicação cliente.
OBS: Um parâmetro pode ser de qualquer tipo de dados exceto BLOB ou ARRAY.
EXEMPLO:CREATE PROCEDURE pPrecoVenda(
p_grav integer
)
RETURNS(
grav integer,
precovenda decimal(10,2)
)
AS
BEGIN
SELECT a.grav_id, AVG(a.cd_preco_venda) FROM cd a, gravadora g
WHERE a.grav_id = g.grav_id AND
a.grav_id = :p_grav
GROUP BY a.grav_id
INTO :grav, :precovenda;
SUSPEND;
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
Tanto parâmetro de entrada como parâmetros de saída devem estar entre
parênteses.
O comando SUSPEND pausa a SP até que o cliente busque os valores dos
parâmetros de saída.
DECLARANDO VARIÁVEIS
Estas variáveis existem somente enquanto a SP está sendo executada e seu
escopo é local.
São declaradas depois da palavra chave AS e antes do BEGIN.
SINTAXE:
DECLARE VARIABLE nome TIPO;
EXEMPLO:
DECLARE VARIABLE valor decimal(10,2);
Ao usar a variável esta deve ser precedida de dois pontos „:‟;
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
EXEMPLO:CREATE PROCEDURE mus_duracao (
p_mus INTEGER)
AS
DECLARE VARIABLE duracao_temp TIME;
DECLARE VARIABLE musica_temp VARCHAR(50);
BEGIN
SELECT m.mus_nome, m.mus_duracao FROM musica m
WHERE m.mus_id = :p_mus
INTO :musica_temp, :duracao_temp;
IF (:duracao_temp > '00:02:00') THEN
BEGIN
EXCEPTION musica_longa;
SUSPEND;
END
ELSE
BEGIN
EXCEPTION musica_curta;
END
SUSPEND;
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
ELEMENTOS DA LINGUAGEM
Inclui todas as construções de uma linguagem de programação estruturada,
como:
Cometários: /* Este é um comentário */
Bloco de comandos (BEGIN-END): É possível usar construções como IF-THEN-
ELSE e loops WHILE que somente podem conter um comando.
Comandos de atribuição: observe o exemplo
var1 = var2 * var3
var1 pode ser um parâmetro.
Operador de concatenação: || (duas barras verticais)
Além desses elementos é possível usar as expressões condicionais:
BETWEEN
LIKE
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
IN
EXISTS
ANY
ALL
IS NULL
IS NOT NULL
CONTAINING
STARTING WITH
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
USANDO COMANDOS SQL NAS STORED PROCEDURES
É possível usar comandos como SELECT, INSERT, UPDATE e DELETE
exatamente como em uma query apenas com algumas alterações na sintaxe.
Para todos esses comando é possível usar variáveis ou parâmetros.
Não é possível usar comandos da DDL em uma SP: CREATE, DROP, GRANT,
REVOKE, COMMIT e ROLLBACK
EXEMPLO:
CREATE PROCEDURE i_autor (
id INTEGER,
nome VARCHAR(50))
AS
BEGIN
INSERT INTO autor (aut_id, aut_nome) VALUES (:id, :nome);
SUSPEND;
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
USANDO FOR SELECT e DO
Os exemplos anteriores que selecionam um ou mais valores para uma variável é
bom desde que o SELECT retorne apenas uma linha.
Para processar várias linhas deverá ser usado o comando FOR SELECT e DO.
EXEMPLO:CREATE PROCEDURE p_buscacd (
p_grav INTEGER)
RETURNS(
grav INTEGER,
cd VARCHAR(50))
AS
BEGIN
FOR SELECT grav_id, cd_nome FROM CD
WHERE grav_id = :p_grav
INTO :grav, :cd
DO
SUSPEND;
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
USO DO SUSPEND
O comando SUSPEND diz para a SP suspender a execução até que uma
solicitação de dados (fetch).
SUSPEND não é somente usado com FOR SELECT DO. É usado sempre que a
SP retorna um valor para o cliente.
EXEMPLO:CREATE PROCEDURE p_qtdcd
RETURNS(
qtd INTEGER
)
AS
BEGIN
SELECT COUNT(*) FROM cd
INTO :qtd;
SUSPEND;
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
DILEMA DO PONTO-E-VÍRGULA ‘;’
O console identifica o fim de cada comando em um script SQL pelo caractere de
término de comando que é por default o ponto-e-vírgula „;‟
Isto funciona bem na maioria dos casos, mas não na criação de SP e triggers,
pois cada comando interno da SP termina com ponto-e-vírgula.
Dessa forma ao encontrar o primeiro ponto-e-vírgula o console entende que é o
fim da criação da SP e anuncia o erro.
A solução é trocar o caractere de término de comando por um outro diferente do
ponto-e-vírgula.
Para isso usamos o comando SET TERM, conforme script a seguir.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
EXEMPLO:
SET TERM ^ ;CREATE PROCEDURE p_qtdautor
RETURNS(
qtd INTEGER
)
AS
BEGIN
SELECT COUNT(*) FROM autor
INTO :qtd;
SUSPEND;
END
SET TERM ; ^
Observe que foi substituído o caractere ponto-e-vírgula que indica o termino de
comando pelo ^ (circunflexo) logo na primeira linha do script e ao fim foi retornado
ao caractere padrão.
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
APAGANDO STORED PROCEDURE
Para remover uma SP use o comando DROP PROCEDURE;
SINTAXE:
DROP PROCEDURE nome;
EXEMPLO:
DROP PROCEDURE p_qtdcd;
Somente o SYSDBA ou o proprietário da SP podem apagá-la
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
ALTERANDO STORED PROCEDURE
Para alterar uma SP use o comando ALTER PROCEDURE;
A primeira impressão é que não iremos precisar desse comando. Entretanto, não
é possível apagar uma SP que chamada por outra SP.
SINTAXE:
ALTER PROCEDURE nome
<parâmetros de entrada>
RETURNS
<parâmetros de saída>
AS
<declaração das variáveis locais>
BEGIN
<comandos da procedure>
END
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
EXEMPLO:
ALTER PROCEDURE p_qtdautor
RETURNS(
quantidade INTEGER
)
AS
BEGIN
SELECT COUNT(*) FROM autor
INTO :quantidade;
SUSPEND;
END;
Fazendo isso o elimina-se a dependência entre SP
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
CHAMANDO STORED PROCEDURE
SP no Firebird são divididas em dois grupos de acordo com que são chamadas.
SP que retornam valores através de parâmetros de saída são chamadas de
select procedures, pois elas podem ser usadas no lugar do nome de uma tabela
em um comando SELECT
EXEMPLO:
SELECT * FROM p_qtdautor
É possível também chamar SP que possuem parâmetros de entrada, passando o
parâmetro após o nome da SP no comando SELECT.
EXEMPLO:
SELECT * FROM p_buscacd(:P_GRAV)
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
CHAMANDO NON-SELECT PROCEDURE
Non-select procedure são aquelas SP que não retornam qualquer resultado. Ela
possui apenas parâmetros e entrada e realiza inserção e atualização de dados.
O comando usado usado nestes casos é EXECUTE PROCEDURE
EXEMPLO:
SELECT * FROM p_qtdautor
É possível também chamar SP que possuem parâmetros de entrada, passando o
parâmetro após o nome da SP no comando SELECT.
EXEMPLO:
EXECUTE PROCEDURE i_autor(:ID, :NOME);
Patterns – Especificação de Casos de Uso
Modelo de Dados Relacional
Realizar exercício referente a matéria.