Este é um assunto muito importante , e , se você estiver realmente querendo criar aplicações com um bom desempenho usando banco de dados relacionais vai ter que compreender e saber utilizar muito bem as Stored Procedures. (Daqui pra frente estarei me referindo a SP como Stored Procedures)
Já tratamos deste assunto, ainda que usando a DAO e o Access, no artigo - SQL : Criando consultas parametrizadas no Visual Basic. Vamos aqui nos aprofundar um pouco mais desta vez iremos ver como usar as SP.
Mas o que são os Procedimentos Armazenados ou SP ?
No artigo usando a DAO e o Access , dissemos que :
O microsoft Access nos dá a possibilidade de criar e armazenar consultas dentro do arquivo de banco de dados. A vantagem em armazenar as consultas no banco de dados é que para executar uma instrução SQL o JET verifica erros de sintaxe, depois ele tenta otimizar a instrução e a seguir executa a instrução, tudo isto leva tempo e a coisa piora se você estiver executando as mesmas instruções SQl diversas vezes, pois o JET terá que refazer tudo novamente.
O conceito não muda muito quando usamos um banco de dados do SQL Server , assim , de forma resumida , temos que:
Procedimentos armazenados são tarefas ( declarações ) que estão armazenados no banco de dados e que são executadas diretamente no servidor de banco de dados.
Tudo se passa como se um procedimento armazenado - SP - fosse como uma função no Visual Basic (fazendo uma analogia) pois podemos usar parâmetros de entrada e receber o retorno. As vantagens das SP são:
Como irei tratar das SP sob a ótica do SQL Server cabe aqui ajustar nossa definição de SP para o SQL Server :
Uma SP é um programa Transact-SQL armazenado em um banco de dados SQL Server que pode conter variáveis , loops e instruções condicionais podendo assim usar parâmetros de entrada , realizar várias tarefas e retornar um ou mais parâmetros de saída ou recordsets. As SP podem ser executadas manualmente ou podem ser chamadas por outros programas.
Nota: Transact-SQL é a linguagem de scripts usada para escrever as SP . Sua sintaxe é parecida com a SQL e utiliza loops e instruções condicionais ( If-then-Else , Select , While, , etc...) semelhantes as usadas no Visual Basic.
A sintaxe básica de uma SP é a seguinte:
CREATE PROCEDURE nome_da_SP
@nome_do_Parametro1 tipo_de_dados1,
@nome_do_Parametro2 tipo_de_dados2 OUTPUT
@nome_do_Parametro3 tipo_de_dados3,
AS sql_declaração
onde :
Você pode usar quantos parâmetros quiser para passar valores para um SP ; sendo que um parâmetro que retorna um valor para o SP é chamado de parâmetro de SAIDA - indicado pela palavra OUTPUT.
Agora vamos exibir uma SP em um banco de dados SQL Server , para isto você vai precisar ter instalado no SQL Server na sua máquina. Vamos exibir a SP - Ten Most Expensive Products - armazenada no banco de dados Nortwind do SQL Server 2000. ( é a versão que estou usando...). Os passos são:
Fig 1.0 - A Stored Procedure - Ten Most Expensive Products - armazenada no banco de dados Northwind |
Fig 2.0 - O conteúdo da SP - Ten Most Expensive Products ( Os dez produtos mais caros ) |
Veja que a SP retorna um recordset com os 10 produtos mais caros da tabela Products do banco de dados Northwind ordenados pelo preço.
Vejamos como executar uma SP , ou seja , chamar uma SP que já esta pronta e armazenada no Banco de dados via ADO. No nosso caso vamos aproveitar e fazer a chamada da SP - Ten Most Expensive Products que esta no banco de dados Northwind do SQL Server 2000 ( O SQL Server 7 também traz o mesmo banco de dados). Ao utilizar a ADO para chamar uma SP devemos ter em mente que :
Então como nossa SP - Ten Most Expensive Products - não tem parâmetros de saida nem de entrada , e, apenas retorna um recordset , vamos usar o método Execute para chamar essa SP, assim:
Dim conexao as ADODB.Connection Dim Rst as ADODB.Recordset
Set Conexao = CreateObject("ADODB.Connection")
Conexao.Open "Provider=SQLOLEDB;"
& _
Set Rst = conexao.Execute("EXECUTE [Ten Most Expensive Products]")
list1.clear While Not Rst.EOF list1.additem "Produto : " & Rst("TenMostExpensiveProducts") & vbtab & " - " Preço : " & Rst("UnitPrice") Rst.Movenext Wend
Rst.close Conexao.close Set Rst = Nothing Set Conexao = Nothing |
Não esqueça de referenciar a ADO no projeto quando for testar o código acima. O resultado é exibido na figura 3.0 abaixo:
fig 3.0 - O resultado da SP - Ten Most Expansive Products- sendo chamada via ADO . |
Leia também : ADO Stored Procedures
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ??
Chegou o
Super DVD C# com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: