PROGRAMAÇÃO PROCEDURAL DO SERVIDOR
A Programação Procedural do Servidor (Stored Procedure) é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a qualquer momento tanto pelo SGBD (Sistema Gerenciador de Banco de Dados) quanto por um sistema que faz interface com o mesmo.
A utilização de Stored Procedures é uma técnica eficiente de execução de operações repetitivas. Ao invés de digitar os comandos cada vez que determinada operação necessite ser executada, criamos um Stored Procedure e o chamamos. Em um Stored Procedure também podemos ter estruturas de controle e decisão, típicas das linguagens de programação. Em termos de desenvolvimento de aplicações, também temos vantagens com a utilização de Stored Procedures.
CREATE PROCEDURE TESTE AS BEGIN SELECT O FAMOSO HELLO WORLD! END
Perceba que os comandos de início e término de bloco, BEGIN e END respectivamente, são obrigatórios no início e fim do comando.
Bom, pode-se receber parâmetros, e utilizá-los em instruções SQL que serão executadas dentro da Stored Procedure:
CREATE PROCEDURE TESTE @PAR1 INT AS BEGIN UPDATE TABELA1 SET CAMPO1 = NOVO_VALOR WHERE CAMPO2 = @PAR1 END
Perceba que no exemplo acima, não é utilizado parênteses, pois Stored Procedure é um pouco diferente de funções. Como uma Stored Procedure fica armazenada no banco de dados, ela já é pré-compilada e o SQL Server a executa mais rapidamente.
Outra vantagem das Stored Procedures é que um programa chamador, seja ele uma página ASP ou um programa em VB, Delphi, Java, etc, só precisa chamar o nome da Stored Procedure, que pode conter diversos comandos Transact-SQL embutidos dentro dela, evitando assim um tráfego de rede maior, resultando em resposta mais rápida.
Uma Stored Procedure pode ainda retornar valores para a aplicação. Aqui temos um detalhe: o SQL Server permite o retorno de dados em forma de uma tabela após a execução ou um valor de retorno normal. Exemplo:
CREATE PROCEDURE TESTE @PAR1 INT AS BEGIN SELECT @PAR1*@PAR1 AS QUADRADO END
No exemplo acima a aplicação chamadora (cliente) pode capturar o retorno da Stored Procedure através do campo chamado QUADRADO, que contém somente um valor de retorno: o parâmetro elevado ao quadrado.
O uso de Stored Procedure é encorajado, mas deve-se utilizar este recurso com cuidado pois se utilizado em excesso o SQL Server pode ser sobrecarregado e o banco de dados pode ficar comprometido, mas ao mesmo tempo podemos obter um ganho de performance considerável, dependendo do caso.
Aplicações de Stored Procedure
CREATE PROCEDURE BuscarClientesPorNome @Nome VARCHAR(50) AS BEGIN SELECT * FROM Clientes WHERE Nome = @Nome END
Neste exemplo, a stored procedure BuscarClientesPorNome recebe um parâmetro @Nome e retorna todos os clientes com o nome fornecido.
CREATE PROCEDURE CalcularSoma @Num1 INT, @Num2 INT, @Resultado INT OUTPUT AS BEGIN SET @Resultado = @Num1 + @Num2 END
Neste exemplo, a stored procedure CalcularSoma recebe dois parâmetros @Num1 e @Num2 e retorna o resultado da soma desses números no parâmetro de saída @Resultado.
CREATE PROCEDURE InserirProduto @Nome VARCHAR(50), @Preco DECIMAL(10,2) WITH EXECUTE AS 'UsuariodeAcesso' AS BEGIN INSERT INTO Produtos (Nome, Preco) VALUES (@Nome, @Preco) END
Neste exemplo, a stored procedure InserirProduto é executada com as permissões do usuário "UsuariodeAcesso". Isso permite controlar quais usuários têm permissão para executar a procedure e, indiretamente, acessar os dados da tabela Produtos.
CREATE PROCEDURE BuscarClientesAtivos AS BEGIN SELECT * FROM Clientes WHERE Ativo = 1 END
Neste exemplo simples, a stored procedure BuscarClientesAtivos retorna todos os clientes ativos. Ao utilizar a stored procedure em vez de enviar a consulta SQL diretamente pela rede, pode-se obter um desempenho melhor, especialmente se a tabela Clientes for grande e a consulta for executada com frequência.
CREATE PROCEDURE InserirPedido @ProdutoID INT, @Quantidade INT AS BEGIN -- Verificar se o produto existe na tabela de produtos IF EXISTS (SELECT 1 FROM Produtos WHERE ProdutoID = @ProdutoID) BEGIN -- Inserir o pedido na tabela de pedidos INSERT INTO Pedidos(ProdutoID,Quantidade) VALUES(@ProdutoID,@Quantidade) END ELSE BEGIN -- Produto não encontrado, retornar um erro ou tomar alguma ação RAISERROR ('O produto não existe na tabela de produtos.', 16, 1) END END
Neste exemplo, a stored procedure InserirPedido recebe o ID do produto e a quantidade do pedido como parâmetros. Antes de realizar a inserção na tabela de Pedidos, a stored procedure verifica se o produto existe na tabela de Produtos. Se o produto existir, o pedido é inserido normalmente. Caso contrário, a stored procedure levanta um erro utilizando a instrução RAISERROR, informando que o produto não existe.
Com intuito de apoiar o aprendizado em Banco de Dados, sugere-se assistir a videoaula para o aperfeiçoamento no conhecimento deste conteúdo. |
Atividade de Fixação
No intuito de fixar a aprendizagem iniciada por meio deste módulo e verificar como está sua compreensão sobre o mesmo, são sugeridos alguns exercícios de fixação para serem resolvidos. Clique no link de exercícios ao lado, pois será por meio dele iniciada a lista de exercícios sobre os conteúdos estudados até este momento. Boa revisão sobre os mesmos!!