Pular para o conteúdo
  • Este tópico contém 9 respostas, 3 vozes e foi atualizado pela última vez 15 anos atrás por Avatar de vitorpatriarchavitorpatriarcha.
Visualizando 10 posts - 1 até 10 (de 10 do total)
  • Autor
    Posts
  • #84868
    Avatar de raphaacraphaac
    Participante

      Alguem, por favor, poderia me ajudar a descobrir porque o pl/sql reclama do CASE dentro da procedure, sendo que quando efetuo o teste como sql simplesmente, ele funciona, mas quando o coloco em procedure, o mesmo não aceita, onde esta o erro?

      PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
      CRESULT OUT C_CURSOR) AS

      BEGIN
      OPEN CRESULT FOR

      SELECT C.CODI_CD_SQUENCIAL as ID,
      C.CODI_CD_INTERNO as “CODIGO INTERNO”,
      CASE WHEN
      (SELECT COUNT(*)
      FROM TBT_EVENTO E
      WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
      E.EVEN_DT_REALDEVOLUCAO IS NULL) > 0 THEN
      ‘Emprestado’
      ELSE
      ‘Acervo’
      END AS STATUS
      FROM TBT_CODIGO C
      WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL

      END;

      Erro::::

      Compilation errors for PACKAGE BODY TBTADM.PKBT_CODIGO

      Error: PLS-00103: Encountered the symbol “CASE” when expecting one of the following:

      ( – + mod null

      table avg count current max min prior sql stddev sum variance
      execute the forall time timestamp interval date


      Line: 114
      Text: CASE WHEN

      #84869
      Avatar de Leonardo LitzLeonardo Litz
      Participante

        Olá
        raphaac

        Não é possível capturar um retorno de uma query em um case ou if.
        Você pode utilizar um decode:

        SELECT C.CODI_CD_SQUENCIAL as ID,
        C.CODI_CD_INTERNO as “CODIGO INTERNO”,
        decode((SELECT COUNT(*)
        FROM TBT_EVENTO E
        WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL
        AND E.EVEN_DT_REALDEVOLUCAO IS NULL),0,’Acervo’,’Emprestado’) AS STATUS
        FROM TBT_CODIGO C
        WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL

        Vlw Leonardo Litz

        #84870
        Avatar de raphaacraphaac
        Participante

          Obrigado Leonardo, mas eu já havia testado asim, e o erro foi o seguinte:

          Compilation errors for PACKAGE BODY TBTADM.PKBT_CODIGO

          Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:

                ( - + mod not null others 
                <a> <a> avg
                count current exists max min prior sql stddev sum variance
                execute forall time timestamp interval date
                <a>
                <a> <a>
          

          Line: 115

          Muito Obrigado

          [quote=”Litz”:2ixiiu90]Olá
          raphaac

          Não é possível capturar um retorno de uma query em um case ou if.
          Você pode utilizar um decode:

          SELECT C.CODI_CD_SQUENCIAL as ID,
          C.CODI_CD_INTERNO as “CODIGO INTERNO”,
          decode((SELECT COUNT(*)
          FROM TBT_EVENTO E
          WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL
          AND E.EVEN_DT_REALDEVOLUCAO IS NULL),0,’Acervo’,’Emprestado’) AS STATUS
          FROM TBT_CODIGO C
          WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL

          Vlw Leonardo Litz[/quote]

          #84871
          Avatar de Leonardo LitzLeonardo Litz
          Participante

            Cara tem como vc postar a procedure inteira ai?

            #84873
            Avatar de raphaacraphaac
            Participante

              PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
              CRESULT OUT C_CURSOR) AS

              BEGIN
              OPEN CRESULT FOR

                SELECT C.CODI_CD_SQUENCIAL as ID,
                       C.CODI_CD_INTERNO as "CODIGO INTERNO", 
                       DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
                                            E.EVEN_DT_REALDEVOLUCAO IS NULL),'0','Acervo','Emprestado')
                        AS STATUS
                  FROM TBT_CODIGO C
                 WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;       
              

              END;

              Obrigado.

              [quote=”Litz”:3op84aqu]Cara tem como vc postar a procedure inteira ai?[/quote]

              #84875
              Avatar de Leonardo LitzLeonardo Litz
              Participante

                Tenta assim

                PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
                CRESULT OUT C_CURSOR) AS

                BEGIN
                OPEN CRESULT FOR

                SELECT C.CODI_CD_SQUENCIAL as ID,
                C.CODI_CD_INTERNO as “CODIGO INTERNO”,
                DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
                E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
                AS STATUS
                FROM TBT_CODIGO C
                WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;

                END;

                END SP_CODIGO_EXEM_STATUS;

                #84881
                Avatar de raphaacraphaac
                Participante

                  Continua com o mesmo erro.

                  Compilation errors for PROCEDURE TBTADM.SP_CODIGO_EXEM_STATUS

                  Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:

                        ( - + mod not null others 
                        <a> <a> avg
                        count current exists max min prior sql stddev sum variance
                        execute forall time timestamp interval date
                        <a>
                        <a> <a>
                  

                  [quote=”Litz”:3d2eqt2e]Tenta assim

                  PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
                  CRESULT OUT C_CURSOR) AS

                  BEGIN
                  OPEN CRESULT FOR

                  SELECT C.CODI_CD_SQUENCIAL as ID,
                  C.CODI_CD_INTERNO as “CODIGO INTERNO”,
                  DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
                  E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
                  AS STATUS
                  FROM TBT_CODIGO C
                  WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;

                  END;

                  END SP_CODIGO_EXEM_STATUS;[/quote]

                  #84882
                  Avatar de raphaacraphaac
                  Participante

                    [quote=”raphaac”:27a8r9kl]Continua com o mesmo erro.

                    Ele esta reclamando do segundo select, ou seja, do SELECT COUNT(*)…

                    Compilation errors for PROCEDURE TBTADM.SP_CODIGO_EXEM_STATUS

                    Error: PLS-00103: Encountered the symbol “SELECT” when expecting one of the following:

                          ( - + mod not null others 
                          <a> <a> avg
                          count current exists max min prior sql stddev sum variance
                          execute forall time timestamp interval date
                          <a>
                          <a> <a>
                    

                    [quote=”Litz”:27a8r9kl]Tenta assim

                    PROCEDURE SP_CODIGO_EXEM_STATUS(P_PROD_CD_SQUENCIAL IN NUMBER,
                    CRESULT OUT C_CURSOR) AS

                    BEGIN
                    OPEN CRESULT FOR

                    SELECT C.CODI_CD_SQUENCIAL as ID,
                    C.CODI_CD_INTERNO as “CODIGO INTERNO”,
                    DECODE((SELECT COUNT(*) FROM TBT_EVENTO E WHERE E.CODI_CD_SQUENCIAL(+) = C.CODI_CD_SQUENCIAL AND
                    E.EVEN_DT_REALDEVOLUCAO IS NULL),’0′,’Acervo’,’Emprestado’)
                    AS STATUS
                    FROM TBT_CODIGO C
                    WHERE C.PROD_CD_SQUENCIAL = P_PROD_CD_SQUENCIAL;

                    END;

                    END SP_CODIGO_EXEM_STATUS;[/quote][/quote]

                    #84883
                    Avatar de Leonardo LitzLeonardo Litz
                    Participante

                      Tenta executar esta query apenas no sqlplus.

                      #84938
                      Avatar de vitorpatriarchavitorpatriarcha
                      Participante

                        Amigo.. Nao estou conseguindo enviar uma solucao para voce aki pelo topico..
                        Nem consigo te enviar MP.

                        Entra em contato vitorpatriarcha@gmail.com caso ainda nao tenha conseguido!

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