Pular para o conteúdo
  • Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 6 anos, 8 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #109135
    Avatar de Leopoldo de SousaLeopoldo de Sousa
    Participante

      Caros Amigos,
      Bom dia!

      Estou com um problema numa consulta relativamente simples, está sendo apresentada a mensagem de parêntese direito não encontrado. Apenas inserir um campo na consulta e sua respectiva tabela. Sem a inserção, a consulta funciona perfeitamente. Poderiam me ajudar?

      Apenas adicionei no select o Campo NR_NEGOCIO da tabela corrwin.VMFNOTCOR_DET_H

      E pedi para me retornar o número do negócio, comparando os campos CD_CLIENTE da tabela referenciada por “a” e a tabela mencionada acima referenciada por “g”

      Poderiam me ajudar nessa questão?

      abraços

      #109137
      Avatar de MottaMotta
      Participante

        Em geral este erro é isto mesmo um parêntese faltando , chato de matar mas só vendo o SQL

        #109138
        Avatar de Leopoldo de SousaLeopoldo de Sousa
        Participante

          Correto Paulo, mas como mencionei no SQL só foi adicionado o nome do campo e da tabela a serem consultados, os SQL’s (Que Funciona e o que está dando problema), estão anexo nesse tópico.

          #109139
          Avatar de MottaMotta
          Participante

            de

            from corrwin.VMFMOV a, corrwin.TMFCORRET b, corrwin.TSCCLIBMF c, corrwin.TSCCLIGER d, corrwin.TSCASSES e, corrwin.VMFDETD_H f, corrwin.VMFNOTCOR_DET_H g
            (
            SELECT a.CD_CLIENTE

            para

            from corrwin.VMFMOV a, corrwin.TMFCORRET b, corrwin.TSCCLIBMF c, corrwin.TSCCLIGER d, corrwin.TSCASSES e, corrwin.VMFDETD_H f, corrwin.VMFNOTCOR_DET_H g,
            (
            SELECT a.CD_CLIENTE

            #109140
            Avatar de Leopoldo de SousaLeopoldo de Sousa
            Participante

              Obrigado Paulo!

              As vezes focamos tanto numa coisa que não percebemos uma pequena “,” .

              Abs

              #109141
              Avatar de MottaMotta
              Participante

                Tem um tópico sobre debug , pode dar uma força ?

                #109142
                Avatar de Leopoldo de SousaLeopoldo de Sousa
                Participante

                  Qual seria o tópico? Me passa…

                  #109143
                  Avatar photoJosé Laurindo Chiappa
                  Moderador

                    Uma dica adicional : pra comparar dois códigos-fontes e rapidamente localizar as diferenças, eu sempre prefiro usar um Editor de texto de programador, que permita mostrar os dois códigos lado a lado… No caso usei o Notepad++, aí de cara colocando os dois arquivos em janelas lado a lado E pesquisei a string NR_NEGOCIO, achei que o trecho :

                    ” ,z9.HH_NEGOCIO as B_HH_NEGOCIO
                    from corrwin.VMFMOV a, corrwin.TMFCORRET b, corrwin.TSCCLIBMF c, corrwin.TSCCLIGER d, corrwin.TSCASSES e, corrwin.VMFDETD_H f, corrwin.VMFNOTCOR_DET_H g
                    (
                    SELECT a.CD_CLIENTE as CD_CLIENTE
                    ,g.NR_NEGOCIO as NR_NEGOCIO
                    ,c.CODASS as CD_ASSESSOR

                    tava diferente do trecho :

                    ” ,z9.HH_NEGOCIO as B_HH_NEGOCIO

                    from corrwin.VMFMOV a, corrwin.TMFCORRET b, corrwin.TSCCLIBMF c, corrwin.TSCCLIGER d, corrwin.TSCASSES e, corrwin.VMFDETD_H f,

                    (

                    SELECT a.CD_CLIENTE as CD_CLIENTE
                    ,c.CODASS as CD_ASSESSOR

                    Se vc não tem nenhum ainda, Aconselho Fortemente que passe a ter na sua caixa de ferramentas algum EDITOR DE TEXTO ESPECIAL PARA PROGRAMADOR, que te deixe comarar textos em janelas diferentes, trabalhar em modo de coluna, etc…. ESSA é a fraqueza principal das IDEs (seja SQL NAVIGATOR, PL/SQL DEVELOPER, SQL DEVELOPER, etc) : o Editor de texto nativo delas é bem fraquinho…

                    []s

                    Chiappa

                    #109208
                    Avatar de Fabio ToledoFabio Toledo
                    Participante

                      Não consigo achar o erro nesse SQL, fica do falando que ta faltando o parentese direito… se algum puder me ajudar, ficarei muito grato

                      SELECT P.CDG_ORDEM,
                      T.CDG_FUNCIONAL,
                      P.NOME,
                      T.EXERCICIO,
                      DECODE(NVL(T.REF_PAGAMENTO,0),0,””,SUBSTR(T.REF_PAGAMENTO,5,2)||”/”||SUBSTR(T.REF_PAGAMENTO,1,4)) as REF_PAG_1,
                      T.DIAS_USUFRUIDOS_1,
                      T.DIAS_N_USUFRUIDOS_1,
                      DECODE(NVL(T.REF_PAGAMENTO2,0),0,””,SUBSTR(T.REF_PAGAMENTO2,5,2)||”/”||SUBSTR(T.REF_PAGAMENTO2,1,4)) as REF_PAG_2,
                      T.DIAS_USUFRUIDOS_2,
                      T.DIAS_N_USUFRUIDOS_2,
                      T.DIAS_TOTAL_USUFRUIDOS,
                      T.DIAS_PAGAMENTO,
                      T.DIAS_TOTAL_N_USUFRUIDOS,
                      T.CDG_SITFUNC,
                      T.CDG_GRU_CARGO,
                      C.CDG_CARGO,
                      C.NME_CARGO

                      FROM USISTEMA.TBCADFUNCIONAL FUN,
                      USISTEMA.TBCADPESSOAL P,
                      USISTEMA.TBDCARGO DC,
                      USISTEMA.TBCARGO C,
                      TABLE(USISTEMA.FERIAS_USUF_PEND_SERVIDORES(:CDG_ORGAO,:REF_ANOMES,:CDG_SITFUNC,:CDG_GRU_CARGO, :CDG_ORDEM,:EXERCICIO_INICIO,:EXERCICIO_FIM)) T

                      WHERE (FUN.CDG_ORGAO = :CDG_ORGAO)
                      AND (FUN.REF_ANOMES = :REF_ANOMES)
                      AND (FUN.ID_AUX = :ID_AUX)
                      AND (FUN.STATUS NOT IN (5))
                      AND (FUN.CDG_ORDEM = T.CDG_ORDEM)
                      AND (FUN.CDG_FUNCIONAL = T.CDG_FUNCIONAL)
                      AND (P.CDG_ORDEM = FUN.CDG_ORDEM)
                      AND (DC.CDG_ORGAO = :CDG_ORGAO)
                      AND (DC.CDG_ORDEM = FUN.CDG_ORDEM)
                      AND (DC.CDG_FUNCIONAL = FUN.CDG_FUNCIONAL)
                      AND (DC.DTA_INI_CARGO = (SELECT MAX(DC2.DTA_INI_CARGO)FROM USISTEMA.TBDCARGO DC2
                      WHERE (DC2.CDG_ORGAO =:CDG_ORGAO)
                      AND (DC2.CDG_ORDEM = DC.CDG_ORDEM)
                      AND (DC2.CDG_FUNCIONAL = DC.CDG_FUNCIONAL)
                      AND (TO_NUMBER(TO_CHAR(DC2.DTA_INI_CARGO,”YYYYMM”)) = :REF_ANOMES) OR (DC2.DTA_FIM_CARGO IS NULL) ) ))
                      AND ((DC.ID_CARGO = 1))
                      AND (C.CDG_ORGAO = :CDG_ORGAO)
                      AND (C.CDG_CARGO = DC.CDG_CARGO)
                      AND (C.DTA_INI_CARGO = (SELECT MAX(C2.DTA_INI_CARGO) FROM USISTEMA.TBCARGO C2
                      WHERE (C2.CDG_ORGAO = C.CDG_ORGAO)
                      AND (C2.CDG_CARGO = C.CDG_CARGO)
                      AND (TO_NUMBER(TO_CHAR(C2.DTA_INI_CARGO,”YYYYMM”)) 0)

                      ORDER BY C.NME_CARGO, P.NOME, T.EXERCICIO

                      #109210
                      Avatar photoJosé Laurindo Chiappa
                      Moderador

                        Colega, olhando à olho nu, sem que o SQL esteja IDENTADO CERTINHO, não identifiquei mas tem coisas suspeitas , como a linha :

                        AND (TO_NUMBER(TO_CHAR(C2.DTA_INI_CARGO,”YYYYMM”)) <= :REF_ANOMES)))

                        Veja que nessa linha eu abro 3 parêntesis MAS fecho 5 : provavelmente algum/uns dele(s) devem estar corretos, fechando sub-queries anteriores, mas SEM UM TEXTO organizado não dá pra saber, de repente teu erro tá aqui, ou não…
                        Sendo assim, *** NÂO HÁ *** OUTRA solução que não seja carregar esse SQL num editor de texto de programação (ou numa IDE) que INDIQUE onde cada parêntesis aberto tá fechando E QUE tenha syntax color (o SQL Developer tem, o NOtepad++ tem, entre n alternativas) , E TAMBÉM vc PRECISA identar teu código : isso implica em fazer com que o parêntesis que abre uma sub-query se está na coluna x feche na coluna x E as sub-queries estejam em colunas mais identadas/avançadas, que vc NÂO TENHA múltiplos parêntesis não relacionados na mesma linha, que Não tenha linhas salsichões, tudo enfiado numa linha só…. SEM ISSO não tem santo que te ajude, vc TEM que se ajudar um pouquinho….

                        []s

                        Chiappa

                        OBS : outro ponto, nós aqui de fora Não Temos as suas tabelas, então Não temos acesso a um dos melhores recursos, que seria executar esse SQL (depois de identado / alinhado) numa tool cliente que te MOSTRE a linha do erro : SQL developer faz, sqlplus faz, entre outros…

                        #109211
                        Avatar photoJosé Laurindo Chiappa
                        Moderador

                          Blz ? Pra não ficar só no blablablá, peguei teu código, joguei no SQL Developer e pedi pra formatar, depois peguei o resultado e joguei no Notepad++, fazendo alguns ajustes extras (como fazer as sub-queries e os ANDs/ORs que estão dentro de parêntesis ficarem nas mesmas colunas) – o NOtepad++ é ótimo pra isso ao se trabalhar no modo Coluna….
                          Com isso em dois minutos cheguei em https://pastebin.com/BUsT0jwu , e aí ficou Fácil de ver que na linha 50 tem um parêntesis a mais se minha Identação estiver correta ** E ** o mais importante, é TOTALMENTE questionável a linha 49 :

                          AND ((TO_NUMBER(TO_CHAR(DC2.DTA_FIM_CARGO,”YYYYMM”)) >= :REF_ANOMES) OR (DC2.DTA_FIM_CARGO IS NULL) )

                          ==> exatamente O QUE vc estava querendo fazer ao meter DUAS aspinhas simples na máscara do TO_CHAR ????? Isso Não faz Sentido, se vc consultar a Documentação vc vai ver que a string da máscara de Formatação é delimitada por aspinhas simples ÚNICAS, não Duplas….

                          Joga o código identado no seu editor de texto de programador preferido, Dá uma checada na minha Identação E reveja essa linha 49… OK ?? O IMPORTANTE é vc entender que essa minha análise decorreu da IDENTAÇÃO e REFORMATAÇÃO do código, nem mais nem menos, SEM MÁGICA AQUI – um código SQL jogado, com os delimitadores tudo fora de posição como o que vc mandou, é INÚTIL…

                          []s

                          Chiappa

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