- Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 6 anos, 8 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
16 de janeiro de 2018 às 3:32 pm #109135Leopoldo de SousaParticipante
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
Attachments:16 de janeiro de 2018 às 4:14 pm #109137MottaParticipanteEm geral este erro é isto mesmo um parêntese faltando , chato de matar mas só vendo o SQL
16 de janeiro de 2018 às 4:39 pm #109138Leopoldo de SousaParticipanteCorreto 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.
16 de janeiro de 2018 às 5:48 pm #109139MottaParticipantede
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_CLIENTEpara
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_CLIENTE16 de janeiro de 2018 às 6:04 pm #109140Leopoldo de SousaParticipanteObrigado Paulo!
As vezes focamos tanto numa coisa que não percebemos uma pequena “,” .
Abs
16 de janeiro de 2018 às 6:12 pm #109141MottaParticipanteTem um tópico sobre debug , pode dar uma força ?
16 de janeiro de 2018 às 6:16 pm #109142Leopoldo de SousaParticipanteQual seria o tópico? Me passa…
16 de janeiro de 2018 às 7:39 pm #109143José Laurindo ChiappaModeradorUma 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
27 de fevereiro de 2018 às 11:05 pm #109208Fabio ToledoParticipanteNã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_CARGOFROM 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)) TWHERE (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
28 de fevereiro de 2018 às 2:00 am #109210José Laurindo ChiappaModeradorColega, 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…
28 de fevereiro de 2018 às 4:17 am #109211José Laurindo ChiappaModeradorBlz ? 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
-
AutorPosts
- Você deve fazer login para responder a este tópico.