Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-00907 Problema con la parentesi a destra mancante:selezionare con order by inside query di inserimento

Entrambe le risposte attuali ignorano il fatto che usando order by e rownum nella stessa query è intrinsecamente pericoloso. Non vi è assolutamente alcuna garanzia che otterrete i dati desiderati. Se desideri la prima riga da una query ordinata, devi usa una sottoquery:

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
       ;

Puoi anche utilizzare una funzione come rank per ordinare i dati nel metodo che desideri, anche se avevi due created_on date identiche avresti ottenuto 2 valori con 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
       ;