SQL Server: Criação e uso de stored procedures
Autor/fonte: Mauro Pichiliani
Tweet
Olá 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!
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!
Enviado por xKuRt em 13/10/2006 às 10:33
Avaliação
Esta publicação ainda não foi avaliada!
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
| Enviado por murillobraga em 26/07/2007 às 18:11 Amigão... você pode passar o link que você fala no uso de transações em stored procedures? Preciso urgentemente mas não sei se vai resolver meu problema. Em meu sistema utilizo as camadas de apresentação, classes que repassam informações à camada de dados (com dados de procedures) e a camada de acesso a dados. Por exemplo: APRESENTAÇÃO: ClasseCarro.IncluirCarro(modeloCarro, ano, placa) idUltimoModelo = ClasseCarro.ConsultarUltimoModelo(...) ClasseModelo.IncluirModelo(idUltimoModelo) ... CLASSE CARRO IncluirCarro (paramModeloCarro, paramAno, paramPlaca) CHAME ClasseDados.SPIncluirCarro(...) CLASSE ACESSO A DADOS ... BeginTransaction Minha dúvida é: como eu posso utilizar meus milhares de métodos (inserção, consultas, atualizações, todas relacionadas) num lugar só? Eu teria que passar todos os dados (campo1.valor, campo2.valor, campo3.valor, NomeProcedure1, campo4.valor, campo5.Valor, NomeProcedure2) desde a camada de apresentação até a de acesso a dados e nela executar um por um, dando o ExecuteNonQuery() após todos os comandos e no final o COMMIT? Grato pela atenção. |
Envio de comentário:
Domingo, 19 de Maio de 2013
Área restrita
Leitura recomendada
Últimas publicações
- Perfis de presidenciáveis no Twitter visam cativar eleitores
- Squid - Limpando cache rapidamente
- Google disponibiliza o PHP no App Engine
- Banda larga fixa cumpre metas de velocidade de internet em São Paulo, Rio de Janeiro e Minas Gerais
- Anatel diz que operadoras de celular não atingiram metas sobre conexão à internet
Top 5 membros
- dddweb213 pts
- andersonop207 pts
- Jotah197 pts
- fbinasco165 pts
- fredbcn117 pts
Últimos membros cadastrados
- valkyem 18/05
- Info Galaxyem 17/05
- notwenem 16/05





