NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
« Lição anterior | ![]() |
Δ Página principal | ![]() |
¤ Capítulos | ![]() |
Próxima lição » |
SQL Server 2005 - CURSO COMPLETO Autor: Júlio Battisti |
|||
---|---|---|---|
Lição 161 - Capítulo 10 - A Estrutura If...Else | |||
Este é o bom e velho IF que existem em qualquer linguagem. A estrutura do IF...ELSE é a seguinte: IF Teste_booleano Comandos se o teste for verdadeiro ELSE Comandos se o teste for falso Vamos a um exemplo prático: Criar um Stored Procedure que recebe o nome de dois países como parâmetros de entrada. O Stored Procedure conta o número de pedidos enviados para cada país. O número de pedidos de cada país é armazenado em uma variável local do Stored Procedure. Depois, um teste é efetuado, utilizando a cláusula IF...ELSE e diferentes mensagens serão emitidas, dependendo do teste ser verdadeiro ou falso. O Stored Procedure será criado como o nome usp_ExIF e será gravado no Banco de Dados NwindAccess. As pesquisas serão feitas na tabela Pedidos do Banco de Dados NwindAccess, da instância SERVIDOR\SQL2005. O comando para criar o Stored Procedure proposto é o seguinte: USE NwindAccess GO CREATE PROCEDURE usp_ExIF @país1 nvarchar(15), @país2 nvarchar(15) AS -- Cria as variáveis locais DECLARE @TotPed1 int, @TotPed2 int DECLARE @mensagem1 Char(100), @mensagem2 Char(100) -- Define o valor de cada variável SET @TotPed1 = (SELECT Count(NúmeroDoPedido) FROM Pedidos WHERE PaísDeDestino=@país1) SET @TotPed2 = (SELECT Count(NúmeroDoPedido) FROM Pedidos WHERE PaísDeDestino=@país2) -- Executo o teste, utilizando IF...ELSE IF (@TotPed1) > (@TotPed2) BEGIN SET @mensagem1= ‘O Número de pedidos do primeiro país é maior’ Print(@mensagem1) END ELSE BEGIN SET @mensagem2= ‘O Número de pedidos do segundo país é maior’ Print(@mensagem2) END Para executarmos este Stored Procedure, utilizamos o seguinte comando: exec usp_ExIF “Brasil”,“EUA” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos do segundo país é maior Como somos um pouco “desconfiados”, vamos conferir se o Stored Procedure está funcionando corretamente. Para isso, vamos simplesmente inverter os dois parâmetros, conforme indicado no comando a seguir: exec usp_ExIF “EUA”,“Brasil” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos do primeiro país é maior Isto confirma o funcionamento do nosso Stored Procedure. Como nós estamos com “más intenções”, vamos tentar “confundir” o Stored Procedure usp_ExIF. Vamos passar o mesmo país para os dois parâmetros, conforme indicado no comando a seguir: exec usp_ExIF “EUA”,“EUA” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos do segundo país é maior Opa !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Um pequeno “bug” no nosso Stored Procedure???? É isso mesmo. Observe o seguinte trecho de código: IF (@TotPed1) > (@TotPed2) BEGIN SET @mensagem1= ‘O Número de pedidos do primeiro país é maior’ Print(@mensagem1) END ELSE BEGIN SET @mensagem2= ‘O Número de pedidos do segundo país é maior’ Print(@mensagem2) END Veja que apenas testamos se o número de pedidos do país 1 é maior do que o número de pedidos do país 2 (IF (@TotPed1) > (@TotPed2)). Se o número de pedidos for igual – o que aconteceu quando passamos o mesmo país para os dois parâmetros de entrada –, o teste falha e serão executados os comandos da parte ELSE. Para corrigir este pequeno bug, temos que alterar o Stored Procedure, prevendo uma terceira situação, na qual o número de pedidos dos dois países é igual. Bem, digamos que este foi um bug introduzido de propósito. Pois agora aprenderemos dois novos detalhes:
Exemplo prático: Utilizar o comando ALTER PROCEDURE, para alterar o Stored Procedure usp_ExIF e corrigir o “bug” existente. Para fazer esta alteração, utilizamos o seguinte comando: USE NwindAccess GO ALTER PROCEDURE usp_ExIF @país1 nvarchar(15), @país2 nvarchar(15) AS -- Cria as variáveis locais DECLARE @TotPed1 int, @TotPed2 int DECLARE @mensagem1 Char(100), @mensagem2 Char(100) DECLARE @mensagem3 Char(100) -- Define o valor de cada variável SET @TotPed1 = (SELECT Count(NúmeroDoPedido) FROM Pedidos WHERE PaísDeDestino=@país1) SET @TotPed2 = (SELECT Count(NúmeroDoPedido) FROM Pedidos WHERE PaísDeDestino=@país2) -- Executo o teste, utilizando IF...ELSE IF (@TotPed1) > (@TotPed2) BEGIN SET @mensagem1= ‘O Número de pedidos do primeiro país é maior’ Print(@mensagem1) END ELSE IF (@TotPed1)<(@TotPed2) BEGIN SET @mensagem2= ‘O Número de pedidos do segundo país é maior’ Print(@mensagem2) END ELSE BEGIN SET @mensagem3= ‘O Número de pedidos dos dois países é igual’ Print(@mensagem3) END Observe que, para alterar o Stored procedure, utilizamos o comando ALTER PROCEDURE e, após a cláusula AS, temos que informar todos os comandos que irão redefinir o Stored Procedure. Os comandos informados irão substituir o conjunto de comandos existentes. Somente o “dono” do Stored Procedure e as roles sysadmin, db_owner e db_ddladmin é que têm permissão para executar o comando ALTER PROCEDURE. Esta permissão não pode ser atribuída a outros usuários ou roles. Vamos testar novamente o Stored Procedure. Para executarmos este Stored Procedure, utilizamos o seguinte comando: exec usp_ExIF “Brazil”,“EUA” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos do segundo país é maior OK. Este é o resultado esperado. Vamos continuar nossos testes. Execute o seguinte comando: exec usp_ExIF “EUA”,“Brasil” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos do primeiro país é maior Maravilha. Estamos quase lá. Só falta o derradeiro teste. Execute o seguinte comando: exec usp_ExIF “EUA”,“EUA” O Stored Procedure usp_ExIF é executado e a seguinte mensagem é emitida: O Número de pedidos dos dois países é igual Maravilha !!!!!!!!!!!!!!! Isto comprova que o bug foi corrigido. Mais alguns comentários sobre o exemplo anterior:
DECLARE @variável1 tipo, @variável2 tipo
SET @variável = valor
SET @TotPed1 = (SELECT Count(NúmeroDoPedido) FROM Pedidos WHERE PaísDeDestino=@país1) Agora vamos aprender mais uma estrutura de controle. |
|||
« Lição anterior | ![]() |
Δ Página principal | ![]() |
¤ Capítulos | ![]() |
Próxima lição » |
Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela
Aplica-se ao Access 2019, 2016, 2013 e 2010!
Para todos os detalhes, acesse:
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2025 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI