Pular para o conteúdo
  • Este tópico contém 11 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 3 meses atrás por CelyCalat.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #96962
    CelyCalat
    Participante

      Eu não estou conseguindo utilizar o case em uma determinada situação :
      Tenho o parametro P_1, que se ele for 1 , deve verificar uma coluna da tabela se = ‘A’.
      Seria assim :

      select
      case
      when P_1 = 1
      then E.STATUS_TRANS = ‘A’
      FROM EMENDAS E

      Alguem tem alguma sugestão de como fazer isso dentro de um select ?
      Obrigada.

      #96963
      Niggaz
      Participante

        Bom dia CelyCalat!

        O que exatamente vc quer retornar?

        #96965
        Peterson
        Participante

          Se o parâmetro P_1 for igual a 1 ele deve retornar o valor da coluna ou verificar se o valor é igual a A? Se tiver que verificar acho q vc tem q colocar um IF.

          #96966
          CelyCalat
          Participante

            [quote=”Niggaz”:298ydreg]Bom dia CelyCalat!

            O que exatamente vc quer retornar?[/quote]
            Bom dia !

            Na verdade é um select bem grande referente a uma tela com varios filtros e um dos filtros verifica um determinado parametro que se for 1 , uma coluna da tabela deve ser ‘A’ , ou se for 2 esta coluna deve ser ‘B’.
            Se eu fosse utilizar um if seria assim :

            If p_1 = 1 then v_coluna_tabela := ‘A’;
            elsif v_coluna_tabela := ‘B’ ;
            end if;

            O resultado deve ser assim :
            select *
            from emendas e
            where e.status_trans = v_coluna_tabela;

            Tenho que colocar esta validação (if) na clausula where do cursor .

            Não sei se consegui explicar…

            Obrigada !!!

            #96967
            Niggaz
            Participante

              Bom, eu achei um pouco confuso…rs mas vamos lá:

              O case seria algo assim:


              select
              case
              when P_1 = 1 then E.STATUS_TRANS = 'A'
              when P_1 = 2 then E.STATUS_TRANS = 'B'
              END
              FROM EMENDAS E

              Agora, eu não entendi a parte do if…Vc quer utilizar os valores A e B verificar no WHERE, é isso?

              #96969
              CelyCalat
              Participante

                Seria isso mesmo, mas eu testei utilizando o CASE e aparece o erro ORA-00905.
                Obrigada.

                [quote=”Niggaz”:31k9yoqs]Bom, eu achei um pouco confuso…rs mas vamos lá:

                O case seria algo assim:


                select
                case
                when P_1 = 1 then E.STATUS_TRANS = 'A'
                when P_1 = 2 then E.STATUS_TRANS = 'B'
                END
                FROM EMENDAS E

                Agora, eu não entendi a parte do if…Vc quer utilizar os valores A e B verificar no WHERE, é isso?[/quote]

                #96970
                Niggaz
                Participante

                  É, eu dei uma vacilada…rs

                  No case é errado fazer: then E.STATUS_TRANS = ‘A’, teria que ser: then ‘A’.

                  Ai no caso essa seria a sua coluna de verificação, ficando assim:


                  select
                  case
                  when P_1 = 1 then 'A'
                  when P_1 = 2 then 'B'
                  END verificacao
                  FROM EMENDAS E

                  Tenta ai!

                  #96971
                  Niggaz
                  Participante

                    Agora se você quer esse valor fixo na coluna STATUS_TRANS, tu pode criar um script para atualizar esse campo. Se for só para fazer um SELECT sem utilizar esse valor para validar no WHERE, vc nem precisaria dessa coluna na tabela.

                    #96972
                    CelyCalat
                    Participante

                      rsrsrs, então , eu acho que agora vc consiga entender melhor o problema.

                      A minha tabela EMENDAS possui o campo STATUS_TRANS ( e varios outros campos) e na clausula where eu tenho que verificar se este campo é ‘A’ ou ‘B’ dependendo do que vier no parametro P_1.

                      O comando CASE seria perfeito se pudesse ser como foi montado, pois ele verifica o parametro e dependendo da sua resposta, ele coloca ‘A’ ou ‘B’ nesta coluna do where. Mas como ele não funciona desta maneira, eu não estou conseguindo encontrar uma solução .

                      Obrigada.

                      [quote=”Niggaz”:113qjnmm]É, eu dei uma vacilada…rs

                      No case é errado fazer: then E.STATUS_TRANS = ‘A’, teria que ser: then ‘A’.

                      Ai no caso essa seria a sua coluna de verificação, ficando assim:


                      select
                      case
                      when P_1 = 1 then 'A'
                      when P_1 = 2 then 'B'
                      END verificacao
                      FROM EMENDAS E

                      Tenta ai![/quote]

                      #96973
                      Niggaz
                      Participante

                        Foi como eu disse aqui oh:

                        [quote=”Niggaz”:1h6kr3s8]Agora se você quer esse valor fixo na coluna STATUS_TRANS, tu pode criar um script para atualizar esse campo. Se for só para fazer um SELECT sem utilizar esse valor para validar no WHERE, vc nem precisaria dessa coluna na tabela.[/quote]

                        Como essa tabela é alimentada? Muitos registros diarios?

                        #96975
                        fsitja
                        Participante

                          Não seria algo assim então:

                          select *
                          from emendas e
                          where e.status_trans = (case when P_1 = 1 then 'A'
                          else 'B' end);

                          #96976
                          CelyCalat
                          Participante

                            Pessoal !

                            Obrigada a todos !!!

                            Este select de baixo resolveu o problema.

                            Valeu !!!!

                            [quote=”fsitja”:3qw4v5zq]Não seria algo assim então:

                            select *
                            from emendas e
                            where e.status_trans = (case when P_1 = 1 then 'A'
                            else 'B' end);
                            [/quote]

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.