-4
Select m.CEAREGA, m.Crotal, rem.IdRexistro, m.IdMostraExt,
to_char(m.DataEntrega, 'DD/MM/YYYY') As Entrada, e.Descricion AS Ensaio,
to_char(rem.DataValidacion, 'DD/MM/YYYY') as DataValidacion, r.Descricion as Resultado, 
to_char(rem.Valor) as Valor, es.Descricion as Especie, tm.Descricion as Mostra,

(select LISTAGG(mo.Descricion, ':::') WITHIN GROUP (order by mo.Descricion)
from motivo_ensaio_mostra mm
join motivo_ensaio mo on mo.CodMotivo=mm.CodMotivo and mm.codLab=mo.codLab
where mm.IdRexistro=rem.IdRexistro and mm.IdMostra=rem.IdMostra and mm.CodLab=rem.CodLab
group by mm.IdRexistro, mm.IdMostra) as Motivo,

(select LISTAGG(trim(remi.NomeDesc || ' ' || remi.PrimeiroApelido || ' ' || remi.SegundoApelido), ':::') 
WITHIN GROUP (order by remi.PrimeiroApelido, remi.SegundoApelido, remi.NomeDesc)
from rexistro_remitente rm
join remitente remi on remi.NIFCIF=rm.NIFCIF and rm.codLab=remi.codLab
where rm.IdRexistro=rem.IdRexistro and rm.CodLab=rem.CodLab
group by rm.IdRexistro) as Remitente

from resultado_ensaio_mostra rem
join resultado r on r.CodResult=rem.CodResult and r.codLab = rem.codLab and r.CODTIPORESULT='P'
join mostra m on m.IdRexistro=rem.IdRexistro and m.IdMostra=rem.IdMostra and m.codLab = rem.codLab 
and m.VlxBaixa=0 and m.EstadoMostra<>10330004 and LENGTH(m.Crotal<5) and m.IdMostra > 201800000
join especie es on es.CodEspec=m.CodEspec and es.codLab = m.codLab
join tipo_mostra tm on tm.CodTipoMost=m.CodTipoMost and tm.codLab = m.codLab

Oracle エラーが表示されます: ORA-00907

欠けている括弧が見つからないか、どこにエラーがありますか。誰でも私を助けることができますか?

前もって感謝します。

4

2 に答える 2

1

フォーマット スタイルを変更すると役立つ場合があります。

サブクエリについては、開き括弧と閉じ括弧が互いに関連付けられた状態を保つようにしています。私はそれらを同じ列に保ち、サブクエリの内容をインデントする傾向があります。

同様に、各述語または計算を互いに明確に分離してください。私はそれらを別々の行に配置することを好みます。これにより、コードは長くなりますが、コードは狭くなります。diff これは、 (およびgit)などのツールに対してはるかに使いやすいです。

これにより、次のようになり、例よりもはるかに高速に視覚的にデバッグできます。 (実際、あなたのものを視覚的にデバッグすることはできません。個々の行または式を分離して解析するのは難しすぎます。)

SELECT
  m.CEAREGA,
  m.Crotal,
  rem.IdRexistro,
  m.IdMostraExt,
  to_char(m.DataEntrega, 'DD/MM/YYYY') As Entrada,
  e.Descricion AS Ensaio,
  to_char(rem.DataValidacion, 'DD/MM/YYYY') as DataValidacion,
  r.Descricion as Resultado, 
  to_char(rem.Valor) as Valor,
  es.Descricion as Especie,
  tm.Descricion as Mostra,
  (
    select
      LISTAGG(mo.Descricion, ':::')
        WITHIN GROUP (order by mo.Descricion)
    from
      motivo_ensaio_mostra mm
    join
      motivo_ensaio mo
        on  mo.CodMotivo=mm.CodMotivo
        and mm.codLab=mo.codLab
    where
          mm.IdRexistro=rem.IdRexistro
      and mm.IdMostra=rem.IdMostra
      and mm.CodLab=rem.CodLab
    group by
      mm.IdRexistro, mm.IdMostra
  ) as Motivo,
  (
    select
      LISTAGG(trim(remi.NomeDesc || ' ' || remi.PrimeiroApelido || ' ' || remi.SegundoApelido), ':::') 
        WITHIN GROUP (order by remi.PrimeiroApelido, remi.SegundoApelido, remi.NomeDesc)
    from
      rexistro_remitente rm
    join
      remitente remi
        on  remi.NIFCIF=rm.NIFCIF
        and rm.codLab=remi.codLab
    where
          rm.IdRexistro=rem.IdRexistro
      and rm.CodLab=rem.CodLab
    group by
      rm.IdRexistro
  ) as Remitente
from
  resultado_ensaio_mostra rem
join
  resultado r
    on  r.CodResult = rem.CodResult
    and r.codLab = rem.codLab
    and r.CODTIPORESULT='P'
join
  mostra m
    on  m.IdRexistro = rem.IdRexistro
    and m.IdMostra = rem.IdMostra
    and m.codLab = rem.codLab 
    and m.VlxBaixa=0
    and m.EstadoMostra<>10330004
    and LENGTH(m.Crotal<5)
    and m.IdMostra > 201800000
join
  especie es
    on  es.CodEspec=m.CodEspec
    and es.codLab = m.codLab
join
  tipo_mostra tm
    on  tm.CodTipoMost=m.CodTipoMost
    and tm.codLab = m.codLab

これは、ブラケットが問題ではないという結論に私を導きます。したがって、括弧の近くにある他の構文エラーである可能性があります。

私があなたのコードを再フォーマットしている間に出てきた答えによると、LENGTH(m.Crotal<5)どちらが正しいように見えますLENGTH(m.Crotal) < 5か?

(本質的に、 の)前に欠落があり<、 の後に余分な 1 つが存在し5ます ...)

于 2018-02-08T08:35:21.373 に答える