0% acharam este documento útil (0 voto)
23 visualizações32 páginas

Stored Procedures em Banco de Dados

Enviado por

Guilherme Kelsch
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
23 visualizações32 páginas

Stored Procedures em Banco de Dados

Enviado por

Guilherme Kelsch
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd

PROGRAMAÇÃO PROCEDURAL EM

BANCO DE DADOS - PARTE I


Prof. Me. Edvar Bergmann Araujo

Universidade Feevale | www.feevale.br/digital | (51) 3586 8800


PROBLEMA
• Como resolver problemas complexos diretamente no Banco de Dados???
• Imagine todas as Regras de Negócio envolvidas no Faturamento de uma Empresa.
• Seria possível contemplar todas as particularidades e regras somente com a
Linguagem SQL???
• Pensando em um exemplo mais específico, vamos imaginar o Processo de
Faturamento da Feevale:
– Regras de Negócio distintas para Alunos, Bolsistas, Funcionários, Professores, ...
– Cursos de Idioma, Extensão, Graduação, Pós-Graduação, Impressões, Biblioteca, ...
PROBLEMA (CONTINUAÇÃO)

• Linguagem SQL não permitiria tratar tantas regras de negócios e características


complexas.
• Necessidade de uma Linguagem de Programação Procedural, com uso de
Variáveis, Estruturas Condicionais, Estruturas de Repetição, etc.

É possível fazer isto diretamente em um SGBD???


SIM, com Stored Procedures
O QUE SÃO STORED PROCEDURES?
• Stored procedures são programas armazenados no banco de dados
• São trechos de códigos que realizam tarefas específicas
• Chamadas como comandos
• Podem receber parâmetros e retornar valores
• SQL e linguagens específicas
• Possibilidade de executar comandos DML como SELECT, INSERT, UPDATE e
DELETE
• Suporte a variáveis, comentários, instruções declarativas, testes
condicionais, desvios e laços.
STORED PROCEDURES - CARACTERÍSTICAS
• Cada stored procedure é um módulo independente de código que pode
ser executado a partir de:
– uma outra procedure;
– uma Trigger;
– de uma aplicação cliente;
– como parte de uma instrução SELECT, retornando valores como se o
procedimento fosse uma subconsulta;

• Elas permitem que se manipule diretamente os dados em banco, sem


qualquer intervenção do cliente e sem impor tráfego sobre a rede.
OBJETIVOS DE UTILIZAÇÃO

 Melhorar o desempenho das aplicações

 Reduzir o volume de dados trafegados na rede

 Melhorar a manutenção do software

 Melhorar a segurança no acesso aos dados


VANTAGENS
• Stored procedures podem executar operações muito mais complexas que
uma simples query.
• Se mais de uma aplicação irá acessar o banco de dados, as stored procedures
podem também economizar tempo de manutenção e desenvolvimento já
que qualquer aplicação poderá chamá-la.
• Alterar a stored procedure sem ter que alterar ou mesmo recompilar cada
aplicação cliente.
• As alterações tornam-se imediatamente disponíveis para todos os aplicativos
clientes que o utilizam.
LINGUAGENS
Específicas de cada SGBD:
• Oracle: PL/SQL
• PostgreSQL: PL/PgSQL
• SQL Server: Transact-SQL
• DB2: SQL PL
• MySQL: PL/MySQL

DESVANTAGEM: como não há uma linguagem padrão, o código é dependente do SGBD.


ESTRUTURA DE UM BLOCO PL/SQL
DECLARE (opcional)
Variáveis, cursores, exceções definidas pelo usuário

BEGIN (obrigatório)
Comandos SQL
Comandos PL/SQL

EXCEPTION (opcional)
Ações para executar quando ocorrer um erro

END; (obrigatório)
TIPOS DE BLOCOS
Procedure Função Anônimo

PROCEDURE name FUNCTION name [DECLARE]


IS RETURN datatype
BEGIN IS BEGIN
-- comandos BEGIN -- comandos
-- comandos
[EXCEPTION] RETURN value; [EXCEPTION]

[EXCEPTION]
END;
END;
END;
VARIÁVEIS
• Declaradas e inicializadas na seção de Declaração
• Podem ter o conteúdo alterado no corpo da Procedure
• Linguagem Tipada: quando cria-se uma variável, define-se o seu tipo
especificando o formato de armazenamento, restrições e faixa de
valores válidos.
• Tipos de dados escalares (os mesmos usados para definir as colunas
das tabelas do Oracle, com suporte a boolean)
• Tipos de dados compostos (registros)
DECLARAÇÃO DE VARIÁVEIS
Sintaxe:
identificador [CONSTANT] datatype [NOT NULL] [:= expressão];

Exemplos:
vDataNasc DATE;
vCodDepto NUMBER(2) := 10;
vCidadeVARCHAR2(30) := 'Novo Hamburgo';
cComissao CONSTANT NUMBER := 1400;
ATRIBUINDO VALORES PARA VARIÁVEIS
Sintaxe:
identificador := expressão ;

Exemplos:
vCodDepto := 50;
vCidade:= 'Novo Hamburgo';
vDataNasc := TO_DATE('01/05/2013', 'DD/MM/YYYY');
ATRIBUTO %TYPE
• Utilizado para declarar uma variável de acordo com:
• uma coluna do banco de dados
• outra variável previamente declarada

• A variável criada terá o mesmo tipo e precisão da coluna da tabela ou variável base.

Exemplo:
vNroConta conta.NRO_CONTA%TYPE;
COMENTANDO O CÓDIGO
• Comente o código para documentar cada fase e auxiliar na depuração. O
comentário pode ser:
• uma única linha, usando dois hifens (--)
• várias linhas, usando os delimitadores /* e */
Exemplos:
-- Incrementar a variável vContador
vContador := vContador + 1; -- pode ser utilizado no final

/*
Bloco de comentário.
Inicia por /* e termina por */
*/
ESTRUTURA DE UMA PROCEDURE
CREATE PROCEDURE Nome_da_Procedure
( nome_parametro1 tipo_parametro1,
nome_parametro2 tipo_parametro2,
...
nome_parametroN tipo_parametroN)
IS
<declaração de variáveis e cursores>
BEGIN

<comandos da procedure>

END;
ESTRUTURA DE UMA FUNCTION

CREATE FUNCTION Nome_da_Funcao


(nome_parametro tipo_parametro)
RETURN <tipo de dados que a função retorna>
IS
<declaração de variáveis locais>
BEGIN
<comandos da função>

RETURN value;
END;
COMANDO IF

Sintaxe IF simples: Sintaxe IF com ELSE:

IF condição THEN IF condição THEN


comandos;
comandos;
ELSE
END IF; comandos;
END IF;
CONTROLE DE REPETIÇÕES
O PL/SQL possui algumas estruturas para controles de repetição:
• O LOOP básico fornece ações repetitivas sem condições globais;
• O FOR loop fornece controle de repetições de ações baseado em um contador;
• O WHILE loop fornece controle de repetições de ações baseado em uma
condição;
• O comando EXIT encerra um loop;
• O comando CONTINUE interrompe a iteração atual e vai para a próxima
iteração do laço.
LOOP BÁSICO

Sintaxe:

LOOP --delimitador de início


comando_1;
comando_2;
... --comandos

EXIT [WHEN condição]; --saída do loop


END LOOP; --delimitador de fim
FOR LOOP

Sintaxe:

FOR contador IN vlr_inicial..valor_final LOOP


comando 1;
comando 2;
...
comando N;
END LOOP;

Obs.: pode-se utilizar a cláusula REVERSE, após o IN, para que a variável de
controle varie de um valor maior para um menor.
WHILE LOOP
Sintaxe:

WHILE condicao LOOP


comando 1;
comando 2;
...
comando N;
END LOOP;

Obs.: A condição é avaliada no início de cada repetição. O loop se encerra


quando a condição for FALSE.
COMO RECUPERAR DADOS ARMAZENADOS NO BANCO?

IMPORTANTE: teremos necessidade de recuperar dados armazenados no banco,


colocá-los em variáveis, para que possam ser manipulados dentro das Procedures e
Functions.
Como fazer isto???
• SELECT .. INTO  possui limitações
• CURSORES  flexível, pode manipular result sets com qualquer número de
linhas.
COMANDOS SELECT EM PL/SQL

Utilizado para recuperar dados do banco de dados


Sintaxe:
SELECT lista_de_colunas
INTO {variavel1[, variavel2, ...]
| record_name
FROM tabela
WHERE condição;
COMANDOS SELECT EM PL/SQL - EXEMPLO

DECLARE
vSaldo NUMBER(15,2);
vLimite conta.LIMITE%TYPE;
BEGIN
SELECT saldo, limite
INTO vSaldo, vLimite
FROM conta
WHERE nro_conta = 30001;
...
END;
COMANDOS SELECT EM PL/SQL

Cuidado:
• O comando SELECT deve retornar somente uma linha.
• Mais de uma linha ou nenhuma linha causa um erro.
• Exceções geradas:
• NO_DATA_FOUND (nenhuma linha)
• TOO_MANY_ROWS (mais de uma linha)
COMO EVITAR?
BEGIN
...
BEGIN
SELECT saldo, limite
INTO vSaldo, vLimite
FROM conta
WHERE nro_conta = 30001;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vSaldo := 0;
vLimite := 0;
END;
...
END;
OPERAÇÕES DML EM PL/SQL

É possível executar comandos DML (INSERT, UPDATE e DELETE) da mesma


forma como seriam utilizados fora de um bloco PL/SQL.

BEGIN
...
INSERT INTO ...
DELETE ...
UPDATE ...
...
END;
EXEMPLO

Desenvolver uma função que retorne o número de cartões de crédito


de uma conta corrente.

Obs.: exemplo simples, apenas com fins didáticos, para demonstrar o


funcionamento.
CREATE FUNCTION funcObtemNumeroCartoes
(pNroConta conta.NRO_CONTA%TYPE)
RETURN NUMBER
IS
vCont NUMBER;
BEGIN
SELECT COUNT(*)
INTO vCont
FROM CARTAO
WHERE NRO_CONTA = pNroConta;

RETURN vCont;
END;
COMO TESTAR?

SELECT C.*,
funcObtemNumeroCartoes(C.NRO_CONTA) AS NRO_CARTOES
FROM CONTA C

OU

SELECT funcObtemNumeroCartoes(30002) AS NRO_CARTOES


FROM DUAL
REFERÊNCIAS
DAMAS, Luís. SQL - Structured Query Language. 6. Ed. Rio de Janeiro: LTC, 214.
ISBN 9788521632443.
https://integrada.minhabiblioteca.com.br/#/books/9788521632450/cfi/6/58!/4
@0:0

ELMASRI, Ramez; NAVATHE, Shamkant B.. Sistemas de banco de dados, 7ª ed.


2016. Pearson. 1152p. ISBN 9788543025001.
https://search.ebscohost.com/login.aspx?direct=true&db=cat02123a&AN=feev.
5089763&lang=pt-br&site=eds-live&scope=site

Você também pode gostar