Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-00907 Problème de parenthèse droite manquante - sélectionnez avec ordre par requête d'insertion intérieure

Les deux réponses actuelles ignorent le fait que l'utilisation de order by et rownum dans la même requête est intrinsèquement dangereux. Il n'y a absolument aucune garantie que vous obtiendrez les données que vous souhaitez. Si vous voulez la première ligne d'une requête ordonnée, vous devez utiliser une sous-requête :

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
       ;

Vous pouvez également utiliser une fonction comme rank pour ordonner les données dans la méthode que vous voulez, mais si vous aviez deux created_on des dates identiques vous vous retrouveriez avec 2 valeurs avec 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
       ;