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.

 
Stored Procedure
 

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

 
  • Parâmetros: Stored procedures podem receber parâmetros, o que permite passar valores para a procedure durante sua chamada. Isso deixa as stored procedures mais flexíveis e fśceis de reutilizar, pois é possível personalizar o comportamento da procedure com base nos parâmetros fornecidos.
  •  
    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.

     
  • Retorno de valores: Stored procedures podem retornar valores para a aplicação que as chamou. Além de retornar dados em forma de uma tabela, como exemplificado, elas também podem retornar valores escalares, como números inteiros ou strings. Isso permite que obtenha-se resultados específicos da procedure e os utilize em seu código.
  •  
    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.

     
  • Segurança: Stored procedures podem ajudar a melhorar a segurança do banco de dados, pois permitem que controle o acesso e as permissões dos usuários. Pode-se conceder permissões de execução apenas para determinadas stored procedures, restringindo o acesso direto aos dados subjacentes.
  •  
    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.

     
  • Performance: O uso de stored procedures pode melhorar o desempenho das aplicações, especialmente em casos de operações repetitivas ou complexas. Como as stored procedures são pré-compiladas e armazenadas no banco de dados, elas podem ser executadas mais rapidamente do que o envio de comandos SQL individuais pela rede.
  •  
    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.

     
  • Restrições semânticas: colocar na programação somente os termos aceitos pela linguagem.
  •  
    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!!