Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-00907 Problema de parêntese direito ausente - selecione com ordem por dentro da consulta de inserção


Ambas as respostas atuais ignoram o fato de que usar order by e rownum na mesma consulta é inerentemente perigoso. Não há absolutamente nenhuma garantia de que você obterá os dados desejados. Se você deseja a primeira linha de uma consulta ordenada, deve use uma subconsulta:
insert into my_tbl ( col1, col2 )
select data, 'more data'
  from ( select data
           from fir_tabl
          where id = 1
          order by created_on desc )
 where rownum = 1
       ;

Você também pode usar uma função como rank para ordenar os dados no método desejado, mas se você tivesse dois created_on datas que fossem idênticas você terminaria com 2 valores com rnk = 1 .
insert into my_tbl ( col1, col2 )
select data, 'more data'
  from ( select data
              , rank() over ( order by created_on desc ) as rnk
           from fir_tabl
          where id = 1)
 where rnk = 1
       ;