GARANTIR DESCONTO

Fórum Subquery Oracle, utilizando quot;ORDER BYquot; na mesma #28970

10/03/2008

0

Bom dia,

Gostaria de esclarecer um erro, ao utilizar uma subconsulta no Oracle 10g, o mesmo me retorna o erro a respeito da falta de parenteses a direita, porem o erro da subconsulta ao que notei se refere a clausula order by, dentro da mesma, alguma solução? ou meu modo de criação da mesma estári incorreta, lembrando que a mesma consulta e valida em firebird, sendo necessario somente a alteração do comando ´rownum = 1´ pelo ´first 1´, segue abaixo o trecho:

(select hs.cod_sit from FPHSTSIT hs where hs.cod_emp=f.cod_emp and hs.cod_func=f.cod_func and hs.dta_alter<=´01/01/2008´ and rownum=1 order by hs.dta_alter desc) ultimaSituacaoMesAno



Javapaulomg

Javapaulomg

Responder

Posts

10/03/2008

Javapaulomg

Uma retificação na consulta.


select ff.cod_func, f.chapa, f.nome,
(select hs.cod_sit from FPHSTSIT hs where hs.cod_emp=f.cod_emp and hs.cod_func=f.cod_func and hs.dta_alter<=´01/01/2008´ and rownum=1 order by hs.dta_alter desc) ultimaSituacaoMesAno
from FPFICHAF ff
inner join FPFUNC f on ff.cod_func=f.cod_func and ff.cod_emp=f.cod_emp
where id_remessa = 1
and cod_tipo not in (1,2)




Responder

Gostei + 0

10/03/2008

Flyskin

o order by deve ser a última instrução do comando select... a única exceção é em funções matemáticas/agregadas do oracle quando existir o comando over()...


Responder

Gostei + 0

03/04/2008

Nigro

Tenho o mesmo ambiente e continua com erro.


Responder

Gostei + 0

06/04/2008

Flyskin

como mencionei antes o problema é o order by na subconsulta pois a linguagem SQL espera que o order by seja a última instrução e quando está interpretando a sua consulta, encontra o order by e não o parênteses para fechar o anterior, te retorna este erro...


Responder

Gostei + 0

15/06/2008

Margaridi

Experimente utilizar uma subquery para trazer a data da ultima atualização:

select ff.cod_func
,      f.chapa
,      f.nome
,      hs.cod_sit ultimaSituacaoMesAno
from   FPHSTSIT hs 
,      FPFICHAF ff 
inner join FPFUNC f on ff.cod_func=f.cod_func and ff.cod_emp=f.cod_emp 
where id_remessa = 1 
and   cod_tipo not in (1,2) 
and   hs.cod_emp=f.cod_emp 
and   hs.cod_func=f.cod_func 
and   hs.dta_alter in
      (select   max(hs1.dta_alter) dta_alter
       from     FPHSTSIT hs1 
       where    hs1.cod_emp=f.cod_emp 
       and      hs1.cod_func=f.cod_func 
       and      hs1.dta_alter<=´01/01/2008´ 
       )
 
       



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar