none
AJUDA: Usar IF e LOOP no lugar de case e while RRS feed

  • Pergunta

  • Delimiter //
    
    Create procedure nome_processo()
    
      Begin
    
       Declare cod, cod_c, aux_cod varchar(11)
    
       Declare acum_c, val    decimal(10,2);
    
       Declare composição cursor for
    
         Select cod_s, cod_s_c, s.valor
    
         From serviço as s, eh_composte as ec
    
         Where s.cod_s = ec.cod_s and
    
           s.cod_s = ec.cod_s_c
    
         Order By cod_s, cod_s_c;
    
       Set acum_c = 0;
    
       Open composição; 
    
       Fetch composição into cod, cod_c, val;
    
       While found_rows()do
    
        While aux_cod = cod do
    
          Set acum_c = acum_c + val;
    
          Fetch composição into cod, cod_c, val;
    
        End while;
    
        Case 
    
          When acum_c>1000,00 then select ('>1000,00');
    
          When acum_c<=1000,00 then select ('<=1000,00');
    
          Else select ('composição inválida);
    
        End case;
    
         Set acum_c=0;
    
         Set aux_cod = cod;
    
        End while;
    
        Close composição;
    
      End //
    
    Delimiter
    
    

    Preciso reescrever um programa substituindo o case e while por if e loop... Sou iniciante na linguagem ainda, por isso peço a ajuda de vcs.

    terça-feira, 20 de julho de 2010 17:58

Todas as Respostas

  • Bruno,

    Mas qual seria o motivo, sendo que, o While utilizado no SQL Server tem a função de funcionar como Loop!!!!

    O Case é um operador lógico condicional que possui a função similar ao IF!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    terça-feira, 20 de julho de 2010 20:19
  • Isso q eu gostaria de saber tbm!

    O programa é um exercicio q eu tenho q reescrever mudando um operador pelo outro, porém pelo q eu entendi ate agora do pouco q aprendi é q nesse caso não dá muita diferença trocar um pelo outro.. estou errado?
    Afinal, se eu trocar um operador pelo outro, vai dar na mesma???

    terça-feira, 20 de julho de 2010 20:53
  • Bruno,

    Basicamente não existe diferenças a olho nu, o que teriamos que fazer é analisar o plano de execução do SQL Server para procurar identififcar possíveis melhores ou condições de uso do IF, Case e While.

    Agora uma observação é importante, você esta utilizando Cursor, este recurso é fantástico em relação a sua praticidade, mas é um grande vilão em relação a performance!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    terça-feira, 20 de julho de 2010 23:53