/Banco de dados

voltar
/Banco de dados

Criação e Uso de Stored Procedures

PorMauro Pichiliani em

Fala
pessoal, na coluna de hoje vou falar um pouco sobre Stored
Procedures, um recurso valioso para o desenvolvimento de aplicações
e performance.

Stored
Procedures nada mais são do que um conjunto de instruções
Transact-SQL que são executadas dentro do banco de dados.
É como escrever um programa dentro do próprio banco de dados
para executar tudo lá dentro.

Dentro
das Stored Procedures devemos utilizar comandos Transact-SQL
que não deixam nada a desejar a comandos de uma liguagem de
programação qualquer, como Visual Basic ou Delphi. O Transact-SQL
possui instruções de comparação (if), loops (while) operadores,
variáveis, funcões, etc.

Vamos
ver um exemplo:

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
, podemos receber parâmetros , e utilizarmos eles 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

Percebam
que no exemplo acima , não utilizamos parênteses , pois Stored
Procedures são um pouco diferentes de funções.

Como
uma Stored Procedure fica armazenada no banco de dados , ela
ja é pre-compilada e o SQL Server a executa mais rapidamente.
Um exemplo de execução desta Stored Procedure , no Query Analyzer
:

/*
Chama a Stored Procedure TESTE passando 10 como primeiro parâmetro
*/

EXECUTE
TESTE 10

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,
evitanto 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. Agora no próximo exemplo:

CREATE
PROCEDURE TESTE @PAR1 INT
AS
BEGIN

SELECT CAMPO1 , CAMPO2 FROM TABELA1

WHERE CAMPO3 = @PAR1
END

Retorna
para o cliente uma tabela contendo dois campos , CAMPO1
e CAMPO2, e podem ser capturados
pela aplicação chamadora como se fossem uma tabela.

O
uso de Stored Procedure é encorajado, mais deve-se utilizar
este recurso com cuidado pois se utilizado em excesso o SQL
Server pode ser sobrecarregado, mas ao mesmo tempo podemos
obter um ganho de performance considerável, dependendo do
caso. Minhas ‘regrinhas’ para o uso de Stored Procedures:

*
Não faça Stored Procedures que somente fazem um Select ou
Update ou Delete. Para isso envie a instrução diretamente.

*
Use sempre transações, para poder ‘voltar’ os dados em caso
de problemas

*
Retorne somente o necessário, evitanto tráfego na rede desnecessário.

*
Use uma nomeclatura coerente para as Stored Procedures e as
variáveis dentro dela

*
SEMPRE idente seu código ao entrar em uma estrutura de bloco.

*
Comente o máximo possível do seu código através do — ou
do /* e */

Abraço!

De 0 a 10, o quanto você recomendaria este artigo para um amigo?

 

Deixe um comentário! 11

11 comentários

Comentários

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Comentando como Anônimo

  1. Gostaria de saber, como contactar com os especialistas em delphi e sql, pois não estou conseguindo gravar os edits(do delphi) nas tabelas do sql. Só consigo gravar campos do tipo texto.

    Grato
    Antonio

  2. Em uma solução em camadas ainda assim não deveria usar uma Stored Procedure para um SELECT, UPDATE ou DELETE?

    Não seria melhor eu ter uma procedure para estas tarefas e a implantação de cada Interface (Desktop ou Web) apenas chamar a procedure sem ter que nas duas enviar o comando ?

    Abraços,

    Sandro

  3. Não vejo motivo para não usar SPs somente para “SELECTS, UPDATES e DELETES”. Mesmo dependendo do seu select, uma enorme quantidade de texto pode ser escrita e ter que trafegar para o servidor. Outro ponto importante é que deixando isso no banco, sua aplicação fica mais limpa, as regras de negócio podem ficar centralizadas no banco (uma abordagem comum, mas há quem prefira deixa a regra na camada de aplicação). Vc tem ponto centralizado para manutenção, isso é chave!

  4. Olá ,

    gostaria de saber se é possível utilizar a stored procedure para comunicação entre o sql server e o mysql?
    Tenho o seguinte problema: gostaria de utilizar trigger do sql server para o mysql, mas nos artigos que já li, verifiquei que isso não é possível, ou que poderia ser feito utilizando stored procedure.
    Você teria alguma idéia de como resolver isso?

    obrigado

    1. Olá Luan,

      Bem, o que talvez dê para fazer é colocar dentro do trigger do SQL Server um acesso ao MySQL por meio de um servidor linkado. Porém este tipo de prática não é muito recomendada, pois quem enviou a instrução para o SQL Server vai ficar aguardando o trigger ser finalizado.

      Mauro Pichiliani

  5. Mauro, bom dia!

    Tópico muito bom, estou com um problema, ´por favor ve se poderia me ajudar?

    Seguinte, Vc sabe como posso fazer no sql server 2005 para que quando seja cadastrado um novo registro em uma tabela “x”, automaticamente o banco de dados encaminhe uma trigger, procedure(ou algo que seja disparado) com os dados que foram gravados naquele momento para a aplicação que é o gerenciador de tarefas da empresa(em vb.net), ele nunca fecha, pois fica no servidor. Tenho que passar por parametro alguns desses dados para esse gerenciador. Entendeu? Isso é possivel? Se sim, como? Por store procedure?

    1. Pelo q entendi vc. quer que o banco de dados, ao sofrer uma manutenção em uma tabela X, este comunique com um serviço passando parâmetros para ele. Bom o que geralmente os banco de dados fazem é comunicar um com outro. Entendo que neste caso o “Serviço” que está rodando no servidor busque as alterações na(s) tabela(s).

    2. Talvez se vc. construir uma aplicação em C# ou java que fique buscando alterações nas tabelas, então essa aplicação passa o parâmetro para o serviço que vc. precisa.

  6. Olá,
    Existe alguma IDE para programação para Stored Procedures?

    Aqui utilizamos bastante SPs (atualmente temos mais de 1.000)
    E escrevemos elas utilizando UltraEdit e Notepad++
    Porém, estes são somente editores de texto que ressaltam comandos de certas linguagens.

    Existe alguma IDE de programação para Stored Procedures (como o Delphi por exemplo)?

    1. Caro amigo, sou bem leigo na questao de SP’s, porem basicamente posso lhe dizer que provavelmente dentro de alguns clientes de gerenciadores de BD existe editores associados, por exemplo, no DATASTUDIO da ibm tem editor interno pra fazer isto, tambem no SQL DEVELOPER e concerteza outros clientes tambem terao ja isto integrado e com ferramentas adicionais pra executar queries, templates, etc..,

leia mais
Este projeto é mantido e patrocinado pelas empresas: