Você está na página 1de 53

BANCO DE DADOS

UNIDADE 3 – PROGRAMAÇÃO EM BD
UNOESC - JOAÇABA

Profª Rogeria Ramos, MSc.


Prof. Guilherme Anzollin
PROGRAMAÇÃO DE
BANCO DE DADOS
PROGRAMAÇÃO DE BANCO DE DADOS
Os SGBDs possuem, além de suas funcionalidades básicas de criação, manipulação e
consulta, recursos baseados em sub-rotinas para controle funcionamento do banco.
Estes recursos são códigos de programas executados dentro do SGBD baseados em
uma linguagem estruturada de script, que é tipicamente baseada em 3 formas
clássicas de operação:
1. Sequência
2. Laços de Repetição
3. Decisão
PROGRAMAÇÃO DE BANCO DE DADOS
Através destes programas do banco de dados tem-se várias vantagens:
 Diminuição do tráfego de informações na rede: a partir do desenvolvimento de
módulos que executam diretamente no servidor de banco de dados;
 Agilidade no processamento: geralmente estes programas são analisados e
armazenados na memória do servidor de banco de dados depois da criação ou
primeira execução;
 Ganho de modularidade: quando se quer alterar uma tarefa, só precisar alterar o
programa definido no banco de dados e não o código do aplicativo;
 Prática do encapsulamento, às vezes a estrutura das tabelas e outros objetos do
banco não tem necessidade de ser conhecida pela aplicação.
PROGRAMAÇÃO DE BANCO DE DADOS
Cada SGBD possui um conjunto específico de recursos para a programação do banco de
dados.
No caso do ORACLE, a linguagem é chamada de PL/SQL (Procedural Language/Structured
Query Language), trata-se de uma linguagem simples para criar programas poderosos, não
só dentro do banco de dados, mas também em diversas ferramentas Oracle.
O Microsoft SQL Server trabalha com a Transact-SQL (Transact-Structured Query
Language) que também permite desenvolver programas poderosos com recursos
complementares ao padrão SQL como controle de fluxo, variáveis locais, funções de suporte
ao processamento de dados.
PROGRAMAÇÃO DE BANCO DE DADOS
A linguagem de programação do MySQL, conhecida como PL/MySQL possui também
características particulares, diferenciando-a de outros SGBDs.
O desenvolvimento de rotinas em PL/MySQL, assim como a maioria das linguagens de
programação, conta com:
• Definição de funções, que podem receber parâmetros e retornar valores;
• Definição e manipulação de variáveis;
• Comandos de decisão e repetição;
• Outros recursos comuns em linguagens de programação que serão
apresentados durante as aulas.
PROGRAMAÇÃO DE BANCO DE DADOS
Cada SGBD possui suas particularidades para a programação de banco de dados mas
todos trabalham em cima dos mesmos conceitos, sendo os mais comuns, que serão vistos
neste material:
• Stored Procedures (Procedimentos armazenados)
• Functions (Funções)
• Cursors (Cursores)
• Triggers (Gatilhos)
• Views (Visões)
STORED PROCEDURES
Uma stored procedure, ou procedimento armazenado, é
um conjunto de comandos SQL que podem ser
armazenados no servidor, ao qual é atribuído um
nome.

Tendo esse conjunto de comandos salvos no banco, os


STORED clientes não precisam reenviar os comandos
PROCEDURES individuais podendo simplesmente fazer referência ao
mesmo chamando a stored procedure.

Podem representar um ganho no desempenho já que


menos informação precisa ser enviada entre o
servidor e o cliente, porém aumenta a carga no
sistema do servidor de banco de dados.
STORED PROCEDURES
Situações onde stored procedures fazem sentido:
• Quando várias aplicações clientes são escritas em diferentes linguagens ou funcionam
em diferentes plataformas, mas precisam realizar as mesmas operações de banco de
dados.
• Quando a segurança é prioritária, pois quando são usadas stored procedures para todas
as operações comuns, os usuários da aplicação não precisam ter acesso diretamente às
tabelas, apenas às stored procedures.
No MySQL é um recurso disponível desde a versão 5.0 e segue a sintaxe SQL:2003 que
também é usada pelo BD2 da IBM e pode suportar outras linguagens proprietárias
(PL/SQL e T-SQL).
STORED PROCEDURES
Exemplificando o funcionamento...
Considere o contexto de uma aplicação comercial
=> o cliente faz um pedido, no qual são inseridos itens;
=> o pedido (assim como os itens) permanece com status “pendente” até ser confirmado;
=> o operador confirma o pedido, registrando o movimento no livro caixa.
STORED PROCEDURES
Exemplificando o funcionamento...
Até o pedido ser confirmado, nenhum lançamento é feito no livro caixa, então é preciso ter uma
rotina de confirmação do pedido, que deve executar as seguintes ações:
○ Atualizar o status do pedido;
○ Atualizar o status dos itens do pedido;
○ Lançar o valor do pedido no caixa.
STORED PROCEDURES
Exemplificando o funcionamento...
Por outro lado, poderíamos agrupar essas três instruções no corpo de um procedimento e
chamá-lo a partir da aplicação uma única vez.
As ações de UPDATE/INSERT/DELETE, a partir daí, ficariam por conta do servidor.
STORED PROCEDURES
● Pontos positivos:
○ Simplificação da execução de instruções SQL pela aplicação;
○ Transferência de parte da responsabilidade de processamento para o servidor.
○ Facilidade na manutenção, reduzindo a quantidade de alterações na aplicação.
● Pontos negativos:
○ Necessidade de maior conhecimento da sintaxe do banco de dados para escrita de
rotinas em SQL;
○ As rotinas ficam mais facilmente acessíveis. Alguém que tenha acesso ao banco
poderá visualizar e alterar o código.
CRIANDO E INVOCANDO STORED PROCEDURES
NO MYSQL

Sintaxe de criação

DELIMITER $$
CREATE PROCEDURE nome_procedimento (parâmetros)
BEGIN
/*CORPO DO PROCEDIMENTO*/
END $$
DELIMITER ;
CRIANDO E INVOCANDO STORED PROCEDURES NO
MYSQL
Os “parâmetros” são opcionais e, caso não sejam necessários, devem permanecer
apenas os parênteses vazios na declaração do procedure.
Para que um procedimento receba parâmetros, é necessário seguir certa sintaxe
(dentro dos parênteses).

(MODO nome TIPO, MODO nome TIPO, MODO nome TIPO)

MODO
IN: apenas para entrada / recebimento de dados no método;
OUT: parâmetro de saída de valor. Deve ser uma variável “por referência”
INOUT: pode ser usada para armazenar valor de entrada e saída de dados. Deve
uma variável “por referência”
CRIANDO E INVOCANDO STORED PROCEDURES NO
MYSQL - uso do comando DELIMITER

Por padrão o MySQL utiliza o sinal de ponto e vírgula como delimitador de comandos,
separando as instruções a serem executadas.
No entanto, dentro do corpo do stored procedure será necessário separar algumas
instruções internamente utilizando esse mesmo sinal, por isso é preciso inicialmente
alterar o delimitador padrão do MySQL (neste caso, para $$) e ao fim da criação do
procedimento, restaurar seu valor padrão.

Tendo criado o procedure, chamá-lo é bastante simples. Para isso fazemos uso da
palavra reservada CALL.

CALL nome_procedimento(parâmetros);
CRIANDO E INVOCANDO STORED PROCEDURES NO
MYSQL – Alguns exemplos: PARÂMETRO DE ENTRADA – IN
DELIMITER $$

CREATE PROCEDURE Selecionar_Produtos(IN quantidade INT)


BEGIN
SELECT * FROM PRODUTOS
LIMIT quantidade;
END $$
DELIMITER ;
Para limitar a resposta da consulta a 2 produtos (por exemplo) apenas...

CALL Selecionar_Produtos(2);
CRIANDO E INVOCANDO STORED PROCEDURES NO
MYSQL – Alguns exemplos: PARÂMETRO DE SAÍDA – OUT

DELIMITER $$

CREATE PROCEDURE Verificar_Quantidade_Produtos(OUT quantidade INT)


BEGIN
SELECT COUNT(*) INTO quantidade FROM PRODUTOS;
END $$
DELIMITER ;

Para consultar quantos produtos a floricultura tem no estoque...

CALL Verificar_Quantidade_Produtos(@total);
SELECT @total;
CRIANDO E INVOCANDO STORED PROCEDURES NO MYSQL
Alguns exemplos: PARÂMETRO DE ENTRADA E SAÍDA – INOUT
DELIMITER $$

CREATE PROCEDURE Elevar_Ao_Quadrado(INOUT numero INT)


BEGIN
SET numero = numero * numero;
END $$
DELIMITER ;

Para calcular o valor de num2...

SET @num = 3;
CALL Elevar_Ao_Quadrado (@num);
SELECT @num;
USANDO VARIÁVEIS NO CORPO DO PROCEDIMENTO
A palavra reservada DECLARE é obrigatória e é a responsável por indicar que uma
variável será declarada com o nome “nome_variavel” (que segue as mesmas regras de
nomeação de variáveis).
O TIPO é o tipo de dados da variável (int, decimal, varchar etc.).
A palavra reservada DEFAULT é opcional e deve ser usada quando se deseja definir um
valor inicial (valor_padrao) para a variável.
A declaração das variáveis deve ser feita logo no início do corpo do procedure, para
aquelas que serão utilizadas em todo o procedimento, ou dentro de um bloco BEGIN-END
específico que limite seu escopo.

DECLARE nome_variavel TIPO DEFAULT valor_padrao;


USANDO VARIÁVEIS NO CORPO DO PROCEDIMENTO

● Para definir um valor para uma variável:


○ Usar SET ou
○ INTO, no caso de associação de valores dentro de consultas.
● ESCOPO das variáveis: define em que pontos elas são reconhecidas.
○ Se definida dentro de um bloco BEGIN/END é válida somente dentro dele, ou seja,
após o END ela já não é mais reconhecida. Assim, é possível definir várias variáveis
com o mesmo nome, mas dentro de blocos BEGIN/END distintos.
● Variáveis, cujo nome inicia com arroba (@), são chamadas variáveis de sessão, e são
válidas enquanto durar a sessão do procedure.
STORED PROCEDURES
Exemplo...
DELIMITER $
CREATE PROCEDURE minha_procedure()
BEGIN
DECLARE minha_variavel VARCHAR(10);
SET minha_variavel = 'Minha variável';
END $
DELIMITER ;
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
STORED PROCEDURES

O comando DELIMITER é
necessário para que o
MySQL não confunda as
instruções e gere erro.

Se a procedure ao lado
for definida sem
DELIMITER, o MySQL
entenderá que
a mesma termina no
primeiro ";".
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
EXERCÍCIO 2
EXERCÍCIO 2
• insere_cidade: responsável por inserir uma cidade de acordo com os parâmetros
recebidos
• insere_cidadao: responsável por inserir uma cidadão de acordo com os parâmetros
recebidos e incrementar a população da respectiva cidade.
• lista_cidades: responsável por listar o nome e população de todas as cidades inseridas.
• lista_cidadaos: responsável por listar o nome de todos os cidadãos inseridos e o nome de
sua respectiva cidade.
• exclui_cidade: responsável por excluir a cidade com o id igual ao informado via
parâmetro.
• exclui_cidadao: responsável por excluir o cidadão com o id igual ao informado via
parâmetro e decrementar a população da respectiva cidade.
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
EXERCÍCIO 3
EXERCÍCIO 3
STORED
PROCEDURES
STORED
PROCEDURES
STORED
PROCEDURES
EXERCÍCIO 4
EXERCÍCIO 4
FUNCTIONS
FUNCTIONS
• Sub-rotinas do tipo função (function) tem estrutura muito parecida com stored
procedures
• A diferença está no fato de que uma function deve retornar um valor (stored procedures
só executam scripts)
• Não precisa de um comando auxiliar para sua chamada (stored procedures usam
CALL), pois podem ser “chamadas” como parte de um comando SQL
• O MySQL conta com várias functions nativas (SUBSTRING(), CURDATE(), TRIM(),
AVG() etc.)
• Muito utilizadas para fazer comparação de dados e retornar valores, executar cálculos,
consultar outras tabelas diferentes de acordo com os parâmetros passados etc.
FUNCTIONS
FUNCTIONS
FUNCTIONS
• Podem ser chamadas/executadas em diversos trechos do script, como na lista de
colunas de um SELECT ou em uma cláusula de WHERE.

• Functions não são alteradas, são excluídas e criadas novamente:


Considere o projeto lógico abaixo para a criação das functions solicitadas:
EXERCÍCIO 5
EXERCÍCIO 5
Criar uma função que recebe a data de nascimento e retorne a
idade. Considere se o aniversário já passou ou não, a partir da data
atual
• Usar as funções definidas NOW() para obter a data atual e
EXERCÍCIO 6

DATE_FORMAT() para que as datas estejam no mesmo


formato quando comparadas
• Consultar o Manual de Referência MySQL

Você também pode gostar